У меня есть массив из строки следующим образом:
['57b69c9d4ae615ef0e312af6','57b69bf477b8e5cd0eb38c88'];
Я преобразовывая это в ObjectId следующим образом:
var objectIds = [];
for(var i=0; i<expenseIds.length; i++){
var _id = new ObjectId(expenseIds[i]);
objectIds.push(_id);
}
ObjectIds:
[ 57b69c9d4ae615ef0e312af6, 57b69bf477b8e5cd0eb38c88 ]
Теперь я использую запрос $in
в mongoDb, чтобы получить все данные следующим образом:
app.models.xxxxx.find({"_id" : {"$in" : objectIds}}, function(err, res){
if(err){
} else {
console.log(res);
}
});
Но его не фильтрует. Все документы в коллекции xxxxx возвращаются. Пожалуйста, поделитесь своими идеями. Заранее спасибо.
EDIT: , когда я бегу команды в Монго оболочки:
db.xxx.find({ _id: { '$in': [ 57b69c9d4ae615ef0e312af6, 57b69bf477b8e5cd0eb38c88 ] }});
Он бросает ошибку:
SyntaxError: identifier starts immediately after numeric literal @(shell):1:35
Ну, покажите свой точный запрос (который будет выполнен) и документы в коллекции. Возможно, фильтр выбирает все документы. –
Возможно, существует проблема с преобразованием строки в 'ObjectId'. Вы пробовали конвертировать без ключевого слова 'new'? –
Немного не по теме: вы также можете использовать [** '.map()' **] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) как 'var objectIds = costIds.map (function (id) {return new ObjectId (id);});' – chridam