在MongoDB中搜索嵌入式数组(使用Java)

加布里埃尔·米塞尔·贡萨尔维斯

我有一个investor包含以下内容的文档

{
    "_id": ObjectId("588ced539df613f71a697bb9"),
    "idInvestor": 1,
    "username": "Alexander Hamilton",
    "password": "123456",
    "email": "[email protected]",
    "name": "Alexander Hamilton",
    "idProfile": 1,
    "questionAnswer": [{
        "**idQuestion**": 1,
        "idAnswer": 1
    }, {
        "**idQuestion**": 2,
        "idAnswer": 1
    }...]
}

我正在尝试编写一个查询,该查询返回所有idQuestionsidinvestor: 1以便将它们存储在ArrayList中。我可以通过以下方式获取嵌入中未包含的其他属性:

Investor investor= new Investor();
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoDatabase database = mongoClient.getDatabase("finnovate");
MongoCollection<Document> collection = database.getCollection("investor");
Document myDoc = collection.find(eq("username", username)).first();
investor.setIdInvestor(myDoc.getDouble("idInvestor").intValue());

但是我不明白如何获取所有idQuestion值。有人可以请问一下吗?

娜塔莉娅·欧莱佛(Natalja Olefire)

在Mongo中,您有一系列文档作为“ questionAnswer”,因此在Java中,它将是Document的ArrayList。在myDoc中,您可以执行以下操作:

List<Document> questionAnswers = (List<Document>)myDoc.get("questionAnswer");
for (Document questionAnswer: questionAnswers) {
    // do whatever you need here
    System.out.println(questionAnswer.getString("idQuestion"));
}

或者,您可以使用聚合来直接选择idQuestion。

collection.aggregate(Arrays.asList(
        Aggregates.match(Filters.eq("username", username)),
        Aggregates.unwind("$questionAnswer"),
        Aggregates.project(Projections.fields(Projections.excludeId(), 
                Projections.computed("idQuestion", "$questionAnswer.idQuestion"), 
                Projections.computed("idAnswer", "$questionAnswer.idAnswer")
        ))
)).forEach(doWhateverYouNeed);

并处理结果块:

Block<Document> doWhateverYouNeed = new Block<Document>() {
     @Override
     public void apply(final Document document) {
         //do whatever you need here
         System.out.println(document.toJson());
     }
};  

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Java在MongoDB中的嵌入式文档中索引和搜索“数组”

在 MongoDB 中搜索嵌入式文档?

MongoDB嵌入式搜索

有没有办法在 MongoDB 中使用聚合管道搜索嵌入式数组?

如何在mongodb中搜索嵌入式文档?

如何在嵌入式数组mongodb中查询嵌入式文档

mongodb嵌入式文档搜索

基于范围查询MongoDB中嵌入式文档的数组

查询Spring Data MongoDB中嵌入式文档的数组

更新mongodb嵌入式数组中的所有元素

在数组mongodb中查找嵌入式对象

嵌入式文档数组中的MongoDB Aggregate ObjectId

使用Presto查询MongoDB嵌入式/嵌套文档的数组

如何使用Mongoose将值推入MongoDB中嵌入式文档中的数组?

如何使用id mongodb在嵌入式文档数组中查找数据?

如何查询Mongodb的嵌入式数组

使用 Java 管理 MongoDB 嵌入式文档

在文档中引用文档的嵌入式数组的嵌入式数组上查询Doctrine2和MongoDB

使用python(pymongo)在mongodb中编辑嵌入式文档

如何使用$ .each在JSON中显示嵌入式数组?

使用Spring Data MongoDB在MongoDB中查找包含嵌入式数组中元素的子列表的实体

查询MongoDB中的嵌入式文档

在mongodb中展开嵌入式文档

何时使用嵌入式文档MongoDB

使用Java在Excel中读取嵌入式pdf文件

猫鼬:使用$ pull删除嵌入式文档数组中的值(MongoDB 3.4版本)

通过在嵌入式对象中搜索键范围在mongodb中进行聚合

在 MongoDB 中构建搜索查询时嵌入式字段和 dbRef 字段之间的区别

嵌入式对象内部的MongoDB全文搜索