2016-09-01 4 views
1

У меня есть массив из строки следующим образом:

['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 
+0

Ну, покажите свой точный запрос (который будет выполнен) и документы в коллекции. Возможно, фильтр выбирает все документы. –

+0

Возможно, существует проблема с преобразованием строки в 'ObjectId'. Вы пробовали конвертировать без ключевого слова 'new'? –

+0

Немного не по теме: вы также можете использовать [** '.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

ответ

0

Вам необходимо включить allowExtendedOperators для вашей модели.

//model.json 
... 
"options": { 
    "validateUpsert": true, 
    "mongodb": { 
     ... 
     "allowExtendedOperators": true 
    } 
    }, 
... 

UPDATE

Также есть проблема с фильтром.

app.models.xxxxx.find({where: {"_id" : {"$in" : objectIds}}}, function(err, res){ 
    if(err){ 

    } else { 
     console.log(res); 
    } 
    }); 

Также вы используете встроенные операторы:

app.models.xxxxx.find({where: {id : {inq : objectIds}}}, function(err, res){ 
     if(err){ 

     } else { 
      console.log(res); 
     } 
     }); 
+0

Я включил, что в уже мой datasource.json .. – Subburaj

+0

метания ошибки 'TypeError: Аргумент должен быть string' – Subburaj

+0

@Subburaj и для исключения 'TypeError', вам нужно отправить идентификаторы в виде текста –

1

если вы используете мангуста попробуйте этот

var objectIds = []; 
for(var i=0; i<expenseIds.length; i++){ 
var _id = mongoose.Types.ObjectId(expenseIds[i]); 
objectIds.push(_id); 
} 

или просто вы можете сделать это с помощью MongoDb

var ObjectId = require('mongodb').ObjectID; 
var objectIds = []; 
for(var i=0; i<expenseIds.length; i++){ 
var _id = ObjectId(expenseIds[i]); 
objectIds.push(_id); 
} 

, пожалуйста, дайте мне знать, если это решает вашу проблему.

Смежные вопросы