mongodb中存储的数组和新数组之间的区别

时间:2011-05-06 00:29:03

标签: mongodb

我是mongodb的新手。

我将以下数据存储在mongodb

    { "_id" : ObjectId("4"), "uid" : "1", "friendsIds" : [ "2", "3" ] }

案例1: 现在,我有一组新的朋友["2","3","4"]

我想比较两个集合,并获取未存储在数据库中的值。在这种情况下,我想获得4

案例2: 现在,我有一组新的朋友["3","4"]

我想比较两个集合,并获取存储在数据库中但不存储在新集合中的值。在这种情况下,我想获得2

可以使用mapReduce完成案例2 吗?

如何在mongodb中实现这两种情况?

3 个答案:

答案 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" ] }