如果您只想找到仅包含指定颜色值的文档,您可以将此表单与$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”的“客户端”端的里程可能会有所不同。