【发布时间】:2014-08-21 14:29:15
【问题描述】:
arr=[{field1:<value1>,field2:<value2}.....]
我想对arr 的field1 使用$in 运算符。我知道我可以创建一个虚拟数组并将field1 值推送到虚拟数组中。但是有没有办法对数组的特定字段使用$in 运算符?
arr 数组与集合没有任何关系。
我想查询特定字段上的所有文档,其值在arr 的field1 中 - field1 应该在运算符$in 的右侧
例子:
arr=[{name:'foo',location:'NY'},{name:'bar',location:'LA'},{name:'foobar',location:'NZ'}]
db.collection.find({fieldx:<Here I want some method to obtain all documents whose fieldx values are in the location field of arr>})
输出应包含其fieldx 值存在于arr 的location 字段中的文档。
查询的输出应该是
[{...
fieldx:'NY',
...
},
{...
fieldx:'LA',
...
},
{...
fieldx:'NZ',
...
}]
fieldx 是我要查询的集合中的字段。它不是我提供的数组的一个字段(arr)。我想将它与数组的字段(location)匹配 - arr 我正在提供查询。
【问题讨论】:
-
只是为了清理你的 cmets,你基本上想做 ` "array": [{ "field1": { "$in":
}},{ "field2": { " $in": } }]` 以某种形式的有效语法对吗?这是否意味着“field1”和“field2”都必须很多,还是意味着它们中的任何一个? -
我不确定你在暗示什么。我想对类似于 $in 的字段进行查询。但是当 $in 运算符比较给定数组中的整个对象时,我想匹配 $in 右侧给定数组上的单个字段。基本上我的主要需求是在 in 的右侧使用点表示法(在提供给查询的数组上)
-
这个例子有一定的意义,澄清是人们正在寻找的。所以“fieldx”是文档中的另一个字段,您想知道它是否与您提供的数组中的某些内容相匹配?还是文档中的另一个数组字段?同样,编辑更好。当你做出改变时告诉人们。并使用@username“标记”
-
@NeilLunn fieldx 是我担心的文档中唯一的字段。 arr 与集合无关。我不想将 arr 中的特定字段值提取到新数组中,并针对新数组对 fieldx 执行 $in 查询。有没有更直接的方法?
-
请回读。你没有正确地解释自己,这就是为什么你还没有答案。我最后的评论非常具体。你有事要解决。
标签: javascript mongodb mongoose mongodb-query aggregation-framework