我是mongodb的新手。
我将以下数据存储在mongodb
中 { "_id" : ObjectId("4"), "uid" : "1", "friendsIds" : [ "2", "3" ] }
案例1:
现在,我有一组新的朋友["2","3","4"]
我想比较两个集合,并获取未存储在数据库中的值。在这种情况下,我想获得4
案例2:
现在,我有一组新的朋友["3","4"]
我想比较两个集合,并获取存储在数据库中但不存储在新集合中的值。在这种情况下,我想获得2
可以使用mapReduce完成案例2 吗?
如何在mongodb中实现这两种情况?
答案 0 :(得分:1)
对于案例1,您似乎需要[$addToSet][1]
。请查看$each
示例。
对于案例2,没有这样的服务器端功能。只需带回文档并比较客户端。
您只是想要2
而不是其他所有行动?
答案 1 :(得分:0)
如果你有两个数组
a = [ "2", "3" ]
b = ["2","3","4"]
in ruby:
a-b = ["4"]
答案 2 :(得分:0)
这可以使用其set operators:
在聚合框架中完成> db.foo.insert({"friendsIds" : [ "2", "3"]})
WriteResult({ "nInserted" : 1 })
> db.foo.aggregate([ {$project: {diff: {$setDifference: [["2","3","4"], '$friendsIds']}}} ])
{ "_id" : ObjectId("53490a53a0e3abbe0dd0c21c"), "diff" : [ "4" ] }
> db.foo.aggregate([ {$project: {diff: {$setDifference: ['$friendsIds', ["3","4"]]}}} ])
{ "_id" : ObjectId("53490a53a0e3abbe0dd0c21c"), "diff" : [ "2" ] }