我需要找到一些具有特定颜色的文档。我已经搜索了这个地方并能够构建以下查询:
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
但语法更好:
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”的“客户端”端的里程可能会有所不同。
关于javascript - meteor /MongoDB : find documents by multiple values of same property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22916420/