$setIsSubset 用于 Mongo 中的常规查询

问题描述 投票:0回答:2

我希望对 MongoDB 中的常规(即非聚合)查询执行相当于

$setIsSubset
http://docs.mongodb.org/manual/reference/operator/aggregation/setIsSubset/ 的操作。 我该怎么做?

假设我有文件

{ 'x' : ['A', 'B'] }
{ 'x' : ['A', 'D'] }

还有那个

filter = ['A', 'B', C']

我想做一个

find({"x" : {'$setIsSubSet':filter}})
并且只期望能回来

{ 'x' : ['A', 'B'] }

似乎大多数条件命令都匹配 any 而不是 all。 我也希望它成为一个子集,所以看起来

$and
$all
不会将
[A,B]
匹配到
[A,B,C]

mongodb mongodb-query
2个回答
10
投票

您可以在 shell 中尝试以下操作:

var filer = ['A', 'B', 'C']
db.coll2.find({x: {"$not": {"$elemMatch": {"$nin" : filer }}}})

输出

 { "_id" : ObjectId("54f4d72f1f22d4a529052760"), "x" : [ "A", "B" ] } 


0
投票

注意:在较新的 Mongo DB 版本中,您可以将其用作具有“$expr”语法的过滤器:

{$expr: {
    $setIsSubset: [ "$myArray",[0,1]]
}}

如果

myArray
字段包含
[0]
[1]
[0,1]

,则返回 true
© www.soinside.com 2019 - 2024. All rights reserved.