查询mongodb文档数组

查询mongodb文档数组,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一堆文件,看起来像: { "ids": [{"name":"aa", "age":1}, {"name":"bb", "age":2}] } 我希望能够查询提供ID集合的文档,比如 db.getCollection('Collection').find({"ids":{$in : [{"name":"aa", "age":1}, {"name":"bb", "age":2}]}}) 一般来说,这是可行的,但是当字段顺序改变时,它会中断,因此,例如,当我执行以下查询时,我无法找到文档

我有一堆文件,看起来像:

{
   "ids": [{"name":"aa", "age":1}, {"name":"bb", "age":2}]
}
我希望能够查询提供ID集合的文档,比如

db.getCollection('Collection').find({"ids":{$in : [{"name":"aa", "age":1}, {"name":"bb", "age":2}]}})
一般来说,这是可行的,但是当字段顺序改变时,它会中断,因此,例如,当我执行以下查询时,我无法找到文档

db.getCollection('Collection').find({"ids":{$in : [{"age":1,"name":"aa"}, { "age":2, "name":"bb"}]}})
我知道我可以尝试总是以“有序”的方式执行字段查询,但从我当前的任务角度来看,这并不总是可能的。这方面有什么帮助吗?

当您想对一组对象运行查询时,您需要:

db.col.find({ $or: [ { "ids": { $elemMatch: {"age":1,"name":"aa"} } }, { "ids": { $elemMatch: { "age":2, "name":"bb"} } } ] })

编辑:您可以决定
$或
$和
是否应为顶级运算符(取决于您的用例)

您需要对对象数组执行查询时:

db.col.find({ $or: [ { "ids": { $elemMatch: {"age":1,"name":"aa"} } }, { "ids": { $elemMatch: { "age":2, "name":"bb"} } } ] })


编辑:您可以决定
$或
$和
是否应该是顶级操作符(取决于您的用例)

是的,问题是我用$or尝试了类似的方法,结果表明性能相当差。这就是为什么我尝试了$in,它提供了更好的性能,但是当字段顺序改变时,它却失败了changed@macpak那是因为他们的工作方式不同$在检查中,精确匹配,$elemMatch是应用于每个元素的一组规则-这就是为什么顺序没有区别是的,问题是我用$or尝试了类似的方法,结果表明性能相当差。这就是为什么我尝试了$in,它提供了更好的性能,但是当字段顺序改变时,它却失败了changed@macpak那是因为他们的工作方式不同$在检查中,精确匹配,$elemMatch是应用于每个元素的一组规则-这就是为什么顺序没有区别。您可以解释为什么我们不能在进行查询之前处理排序表单中的请求吗?您可以解释为什么我们不能在进行查询之前处理排序表单中的请求吗?