我在Mongo中有一个已定义的集合,它是“支持”功能的列表。为了使来自另一个集合的项目被视为“兼容”,我需要获取该项目的功能列表,并查看它们是否都在给定列表中。我已经查询了功能列表中支持的功能集合,并将其列在列表中。
例如,我的列表包含[A, B, C, D, E]
如果我的项目有[A, B]
,则应该返回,但如果它有[A, B, F]
,则不应该。db.myColl.find({"compatibility": {"$in": ["A","B","C","D","E","F"]}})
。 $in运算符声明:
“如果该字段包含数组,则$ in运算符选择 其字段包含至少一个的数组的文档 与指定数组中的值匹配的元素“
$all运算符声明:
“$ all运算符选择字段值为的文档 包含所有指定元素的数组。“
我的问题是该项目没有$ all命令的完整功能集,我不希望它在$ in命令的单个元素上匹配。我的查询看起来像这样(因为我已经从函数集合中检索了兼容函数列表):
db.myColl.find({"compatibility": {"$all": ["A","B","C","D","E","F"]}})
或
db.myColl.find({["A","B","C","D","E","F"]: {"$all": "compatibility"}})
我认为我需要的是有效地反转查询并说出这样的事情(我知道它无效,我只是想说明一点):
{{1}}
有什么想法吗?
答案 0 :(得分:1)
我最近遇到了一个非常类似的问题并找到了解决方案:
db.myColl.find({"compatibility":{$not:{$elemMatch:{$nin:["A","B","C","D","E","F"]}}}})
虽然我不是mongodb的专家,但似乎他们应该为此操作添加原语。
祝你好运!