Mongodb如何查看字段的所有元素是否包含在超集中

时间:2014-05-23 20:32:52

标签: java arrays mongodb subset

我在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}}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我最近遇到了一个非常类似的问题并找到了解决方案:

db.myColl.find({"compatibility":{$not:{$elemMatch:{$nin:["A","B","C","D","E","F"]}}}})

虽然我不是mongodb的专家,但似乎他们应该为此操作添加原语。

祝你好运!