Mongodb:检查数组字段是否包含数字或字符串

时间:2014-01-22 16:29:43

标签: python django mongodb pymongo

我的收藏说“myfollower”如下: -

{
   '_id':ObjectId('15423748234'),
   'userid':12,
   'follower_id':[1,2,3,4,5,6]
}

现在,我想找到包含用户ID“4”的所有文档作为关注者。如何才能做到这一点?

2 个答案:

答案 0 :(得分:4)

可以使用以下内容:

db.myfollower.find({"follower_id" : {"$in" : [4]}})

答案 1 :(得分:1)

如果您只是寻找一个特定的“follower_id”,那么正确的答案是:

db.myfollower.find({follower_id : 4})

以下查询:

db.myfollower.find({"follower_id" : {"$in" : [4]}})

有另一个目的。

第一个查询测试 follower_id 的任何值是4.如果字段 follower_id 是一个数组。 第二个查询测试follower_id的任何值是$ in的任何值。在最后一个查询中,您正在进行N对N匹配。 $ in运算符执行x-to-N查询,如果 follower_id 中有一个值,则x = 1;如果 follower_id 中有N值,则为N. / p>

让我们看一个例子。 这是数据集:

{
    "_id" : ObjectId("52e7e35f4c735353309cf077"),
    "userid" : 12,
    "follower_id" : 4
}
{
    "_id" : ObjectId("52e7e3784c735353309cf078"),
    "userid" : 12,
    "follower_id" : [ 1, 2, 3, 4, 5, 6 ]
}

以下是查询和匹配结果:

> db.followers.find({"follower_id":4})
{ "_id" : ObjectId("52e7e35f4c735353309cf077"), "userid" : 12, "follower_id" : 4 }
{ "_id" : ObjectId("52e7e3784c735353309cf078"), "userid" : 12, "follower_id" : [  1,  2,  3,  4,  5,  6 ] }

> db.followers.find({"follower_id":5})
{ "_id" : ObjectId("52e7e3784c735353309cf078"), "userid" : 12, "follower_id" : [  1,  2,  3,  4,  5,  6 ] }

> db.followers.find({"follower_id":{$in:[4]}})
{ "_id" : ObjectId("52e7e35f4c735353309cf077"), "userid" : 12, "follower_id" : 4 }
{ "_id" : ObjectId("52e7e3784c735353309cf078"), "userid" : 12, "follower_id" : [  1,  2,  3,  4,  5,  6 ] }

> db.followers.find({"follower_id":{$in:[4, 5]}})
{ "_id" : ObjectId("52e7e35f4c735353309cf077"), "userid" : 12, "follower_id" : 4 }
{ "_id" : ObjectId("52e7e3784c735353309cf078"), "userid" : 12, "follower_id" : [  1,  2,  3,  4,  5,  6 ] }

> db.followers.find({"follower_id":{$in:[5, 6]}})
{ "_id" : ObjectId("52e7e3784c735353309cf078"), "userid" : 12, "follower_id" : [  1,  2,  3,  4,  5,  6 ] }