Как получить несколько документов, используя массив идентификатора 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"]