1
A
回答
3
「修改」文檔的唯一要求是.aggregate()
和.mapReduce()
,其中前者是更好的選擇。
在這種情況下,您要求$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
和$in
相反,如果你有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
作爲輸入提供「兩次」,因此也返回「兩次」。
相關問題
- 1. 將NumPy數組與閾值進行比較並返回差異
- 2. 比較兩個數組包含整數,返回差異
- 3. PHP比較數組並返回不同
- 4. Lodash/javascript:比較兩個集合並返回差異
- 5. 如何比較兩個DataTable並返回差異?
- 6. Perl需要比較兩種數據結構和返回差異
- 7. 返回數組比較的比例
- 8. 將json轉換爲數組並比較差異
- 9. 比較兩個數組並獲得所有差異
- 10. Objective-C - 如何比較數組並提取差異?
- 11. 如何比較2個數組並獲得差異
- 12. 更改github差異並列比較?
- 13. 如何比較tabels並獲得差異
- 14. 比較兩個NSDictionaries並查找差異
- 15. 比較行並返回
- 16. 兩個ArrayLists中的項目比較和返回差異
- 17. 比較兩個文本文件並返回差異(不區分大小寫)
- 18. 返回數組策略比較
- 19. CKQuery比較日期返回空數組
- 20. 比較兩個數組並返回相同的數值
- 21. 比較兩個字符串數組並返回各自在vb6中的差異性能良好
- 22. 日期比較差異
- 23. Javascript JSON比較/差異?
- 24. 使用Javascript比較兩個數組並返回布爾值
- 25. as3比較兩個數組並返回索引
- 26. Jquery比較並返回字符串數組
- 27. 比較兩個數組並且不能讓它返回true
- 28. PHP ---比較數組以輸出差異數
- 29. 差異返回1
- 30. 比較兩個整數並使用差異進行計算