Mongodb: Проверьте, содержит ли поле массива число или строку

1

У меня в моей коллекции сказано "myfollower", как показано ниже:

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

Теперь я хочу найти все документы, содержащие идентификатор "4" в качестве подписчика. Как это может быть сделано?

  • 0
    4 in myfollower['follower_id']
  • 1
    просто используйте db.find ({follower_id: 4})
Показать ещё 1 комментарий
Теги:
pymongo

2 ответа

3

Можно было бы использовать:

db.myfollower.find({"follower_id" : {"$in" : [4]}})
  • 1
    Добро пожаловать в стек переполнения . Объясните, почему это работает.
  • 0
    Привет, БФ, В монго оператор $ in похож на оператор in в Oracle SQL. Поэтому можно использовать оператор $ in для поиска значений в массиве.
Показать ещё 1 комментарий
1

Если вы ищете только один конкретный "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 ] }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню