[英]Find documents from a multiple selector element in MongoDB and Meteor
[英]Meteor/MongoDB: find documents by multiple values of same property
我需要找到一些具有特定颜色的文档。 我已经搜索了这个地方,并能够构建以下查询:
db.tasks.find({$or: { color: {$all: ['e4oqPeoBTJtCpG53K', 'cvmQv7vQHunPnmqPz'] }}});
我在这里尝试的是查找所有颜色为e4o...
和cvmQ..
但这根本不起作用。 有什么建议我做错了吗?
如果您只想查找仅包含指定颜色值的文档,则可以将此表单与$and
运算符以及$size
使用:
db.tasks.find({ "$and": [
{ "color": "e4oqPeoBTJtCpG53K" },
{ "color": "cvmQv7vQHunPnmqP"' },
{ "color": { "$size": 2 } }
]}
通过实际修复$all
作为运算符的正确用法,这在MongoDB 2.6和更高版本中进行了一些简化,使其行为与逻辑$and
相似$and
但语法更好:
db.tasks.find({ "$and": [
{"color": {
"$all": [ "e4oqPeoBTJtCpG53K", "cvmQv7vQHunPnmqPz" ]
},
{ "color": { "$size": 2 } }
]}
甚至是写同一件事的另一种方式是使用逻辑$or
:
db.tasks.find({ "$and": [
"$or": [
{"color": [ "e4oqPeoBTJtCpG53K", "cvmQv7vQHunPnmqPz" ] },
{"color": [ "cvmQv7vQHunPnmqPz", "e4oqPeoBTJtCpG53K" ] }
],
{ "color": { "$size": 2 } }
]}
如果数组必须同时包含这两个元素,并且可能包含更多元素,则简单形式是仅使用$and
约束:
db.tasks.find({ "$and": [
{ "color": "e4oqPeoBTJtCpG53K" },
{ "color": "cvmQv7vQHunPnmqP"' }
]}
而且,如果任何文档中的“任何”元素都是逻辑$or
最好用$in
运算符指定
db.tasks.find({
"color": {
"$in": ["e4oqPeoBTJtCpG53K", "cvmQv7vQHunPnmqPz"]
}
})
无论您实际上想做什么,都应该有足够的选择。
另请注意,这些方法可与“服务器端”实现一起使用,但是由于该客户端代码的支持,使用“ minimongo”的“客户端”端的里程可能会有所不同。
尝试不使用$or
,并使用$in
(如果要查找具有列出颜色的文档),(如果需要具有所有列出颜色的文档,则使用$ all)。
db.tasks.find({ color: {$in: ['e4oqPeoBTJtCpG53K', 'cvmQv7vQHunPnmqPz'] }});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.