応答でドキュメントを「変更する」唯一のものは、.aggregate()
と.mapReduce()
です(前者がより良いオプションです)。
この場合、 "sets"を比較し、その2つの間に "difference"を返す$setDifference
を求めています。だからあなたの配列で文書を表す
:
db.collection.insert({ "b": [1, 3, 5, 6, 7, 10] })
ラン集約:
db.collection.aggregate([{ "$project": { "c": { "$setDifference": [ [2,3,4], "$b" ] } } }])
返します
{ "_id" : ObjectId("596005eace45be96e2cb221b"), "c" : [ 2, 4 ] }
をあなたの代わりに "セット" を望んでいない場合[2,3,4,4]
のような配列を指定したい場合は$filter
と0123と比較できます代わりに、あなたは少なくともMongoDBの3.4を持っている場合:
db.collection.aggregate([
{ "$project": {
"c": {
"$filter": {
"input": [2,3,4,4],
"as": "a",
"cond": {
"$not": { "$in": [ "$$a", "$b" ] }
}
}
}
}}
])
またはそれ以前のバージョンで$filter
と$anyElementTrue
と:
db.collection.aggregate([
{ "$project": {
"c": {
"$filter": {
"input": [2,3,4,4],
"as": "a",
"cond": {
"$not": {
"$anyElementTrue": {
"$map": {
"input": "$b",
"as": "b",
"in": {
"$eq": [ "$$a", "$$b" ]
}
}
}
}
}
}
}
}}
])
両方が戻ってくる
:もちろんです
{ "_id" : ObjectId("596005eace45be96e2cb221b"), "c" : [ 2, 4, 4 ] }
4
が入力「2回」として提供されたので「セットではない」ため、「2回」も返されます。