Как получить несколько документов, используя массив идентификатора MongoDb?

У меня есть массив идентификаторов, и я хочу получить весь их документ сразу. Для этого я пишу, но он возвращает 0 записей.

Как я могу выполнить поиск с использованием нескольких идентификаторов?

db.getCollection('feed').find({"_id" : { "$in" : [  
"55880c251df42d0466919268","55bf528e69b70ae79be35006" ]}})

Я могу получить записи, передавая один id, например

db.getCollection('feed').find({"_id":ObjectId("55880c251df42d0466919268")})

Ответ 1

MongoDB чувствителен к типу, что означает, что 1 отличается от '1', поэтому "55880c251df42d0466919268" и ObjectId("55880c251df42d0466919268"). Более поздний из них имеет тип ObjectID, но не str, а также является типом документа MongoDB по умолчанию _id.

Более подробную информацию о ObjectID можно найти здесь.

Просто попробуйте:

db.getCollection('feed').find({"_id" : {"$in" : [ObjectId("55880c251df42d0466919268"), ObjectId("55bf528e69b70ae79be35006")]}});

Ответ 2

Я считаю, что вам не хватает ObjectId. Попробуйте следующее:

db.feed.find({ 
    _id: {
        $in: [ObjectId("55880c251df42d0466919268"), ObjectId("55bf528e69b70ae79be35006")]
    }
});

Ответ 3

Для поиска записей нескольких документов вы должны использовать оператор "$ in". Хотя ваш запрос в порядке, вам просто нужно добавить ObjectId при поиске данных для идентификаторов.

db.feed.find({
  "_id" : {
    "$in" : 
      [ObjectId("55880c251df42d0466919268"), 
       ObjectId("55bf528e69b70ae79be35006")
      ]
   }
});

Ответ 4

Просто я им пользуюсь, и работает нормально:

module.exports.obtenerIncidencias386RangoDias = function (empresas, callback) {
    let arraySuc_Ids = empresas.map((empresa)=>empresa.sucursal_id)
            incidenciasModel.find({'sucursal_id':{$in:arraySuc_Ids}
            }).sort({created_at: 'desc'}).then(
                (resp)=>    {
                    callback(resp)}
            )
};

где:

empresas = ["5ccc642f9e789820146e9cb0","5ccc642f9e789820146e9bb9"]