查询以在 mongodb 中检索数组中的多个对象

query to retrieve multiple objects in an array in mongodb

假设我有如下对象数组。

"array" : [ 
    {
        "id" : 1
    }, 
    {
        "id" : 2
    }, 
    {
        "id" : 2
    }, 
    {
        "id" : 4
    }
]

如果我想从这个数组中检索多个对象 ({id : 2}),聚合查询是这样的。

db.coll.aggregate([{ $match : {"_id" : ObjectId("5492690f72ae469b0e37b61c")}}, { $unwind : "$array"}, { $match : { "array.id" : 2}}, { $group : { _id : "$_id", array : { $push : { id : "$array.id"}}}}  ])

以上聚合的输出是

   {
        "_id" : ObjectId("5492690f72ae469b0e37b61c"),
        "array" : [ 
            {
                "id" : 2
            }, 
            {
                "id" : 2
            }
        ]
    }

现在的问题是: 1) 是否可以在 MongoDB?

中使用 find() 从数组中检索 多个对象

2) 关于性能,聚合是正确的做法吗? (因为我们需要使用四个管道运算符)?

3) 我们可以使用 Java 操作(循环数组并且只保留 {id : 2} 对象)来完成这个之后 find({"_id" : ObjectId("5492690f72ae469b0e37b61c")}) 查询?因为 find 会一次检索文档并将其保存在 RAM 中。但是,如果我们使用聚合,则需要在 RAM 中执行四个操作才能获得输出。

为什么我问第3)个问题是:假设如果同时访问数千个客户端,那么RAM内存就会过载。如果使用 Java 完成,RAM 上的任务较少。

4) workingSet 将在 RAM 中存在多长时间??

我的理解对吗???

如有错误请指正

请建议我对此有正确的见解..

  1. 没有。您用 $ 投射第一个匹配项,投射所有匹配项,或者投射其中 none 个。

  2. 没有。如果您必须使用此数组,聚合将允许您提取多个匹配元素,但正确的解决方案,从概念上和性能上来说,是设计您的文档结构,这样这个问题就不会出现,或者只出现在罕见的查询中其性能不是特别重要。

  3. 是。

  4. 我们没有任何信息可以让我们对这个问题给出一个合理的答案。这也超出了问题其余部分的范围,应该是一个单独的问题。