javascript - meteor /MongoDB : find documents by multiple values of same property

标签 javascript mongodb meteor mongodb-query

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

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/

相关文章:

javascript - 添加到列表而不是单击时替换内容

javascript - 无法在文本字段中输入任何文本

javascript - 是否可以在数组中存储一个值的数字和名称?

mongodb - GORM UpdateAll引用属性

javascript - Meteor 在尝试创建 ObjectID 时返回无效的十六进制字符串错误?

部署后,Meteor 读取 CSV 文件以填充数据库不起作用

javascript - Paper.js 栅格化图层失败

node.js - nodejs mongodb 查找修改并返回新的。无法规范化查询

javascript - METEOR - 将数据从父模板传递到子模板

meteor - 有没有办法查看我可以更新到的 meteor 发布列表?