У меня в моей коллекции сказано "myfollower", как показано ниже:
{
'_id':ObjectId('15423748234'),
'userid':12,
'follower_id':[1,2,3,4,5,6]
}
Теперь я хочу найти все документы, содержащие идентификатор "4" в качестве подписчика. Как это может быть сделано?
Можно было бы использовать:
db.myfollower.find({"follower_id" : {"$in" : [4]}})
Если вы ищете только один конкретный "follower_id", правильный ответ:
db.myfollower.find({follower_id : 4})
Следующий запрос:
db.myfollower.find({"follower_id" : {"$in" : [4]}})
имеет другую цель.
Первый запрос проверяет, что любое значение follower_id равно 4. MongoDB автоматически переводит из соответствия 1 к 1 в соответствие 1-в-N, если поле follower_id является массивом. Второй запрос проверяет, что любое значение follower_id является любым из значений $ in. В этом последнем запросе вы выполняете соответствие N-to-N. Оператор $ in выполняет запрос x-to-N, где x = 1, если у вас есть одно значение в follower_id или N, если у вас есть значение N в follower_id.
Давайте посмотрим на пример. Вот набор данных:
{
"_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 ] }
4 in myfollower['follower_id']