流星/ MongoDB:按相同属性的多个值查找文档

珍露卡·斯卡里(Jeanluca Scaleri)

我需要找到一些具有特定颜色的文档。我已经搜索了这个地方,并能够构造以下查询:

db.tasks.find({$or: { color:  {$all: ['e4oqPeoBTJtCpG53K', 'cvmQv7vQHunPnmqPz'] }}});

我在这里尝试的是查找所有颜色为e4o...和的文档,cvmQ..但这根本不起作用。有什么建议我做错了吗?

尼尔·伦恩

如果只想查找包含指定颜色值的文档,则可以将此格式与$and运算符一起使用,并使用$size

db.tasks.find({ "$and": [
    { "color": "e4oqPeoBTJtCpG53K" },
    { "color": "cvmQv7vQHunPnmqP"' },
    { "color": { "$size": 2 } }

]}

并且通过实际修复正确使用$allas作为运算符的方式,使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”的“客户端”端的里程可能会有所不同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章