2016-09-01 4 views
1

Ich habe ein Array von String wie folgt:

['57b69c9d4ae615ef0e312af6','57b69bf477b8e5cd0eb38c88']; 

ich dies in ObjectId bin Umwandlung wie folgt:

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

objectIds:

[ 57b69c9d4ae615ef0e312af6, 57b69bf477b8e5cd0eb38c88 ] 

Jetzt verwende ich $in Abfrage in MongoDb, um alle Details wie folgt zu holen:

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

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

Aber es filtert nicht. Alle Dokumente in der Sammlung xxxxx werden zurückgegeben .. Bitte teilen Sie Ihre Ideen. Danke im Voraus.

EDIT: wenn ich den Befehl in Mongo Shell ausgeführt wird:

db.xxx.find({ _id: { '$in': [ 57b69c9d4ae615ef0e312af6, 57b69bf477b8e5cd0eb38c88 ] }}); 

Es Fehler wirft:

SyntaxError: identifier starts immediately after numeric literal @(shell):1:35 
+0

Nun, zeigen Sie Ihre genaue Abfrage (die ausgeführt wird) und Dokumente in der Sammlung. Vielleicht wählt der Filter alle Dokumente aus. –

+0

Wahrscheinlich gibt es ein Problem beim Konvertieren von String in 'ObjectId'. Hast du versucht, ohne "neues" Keyword zu konvertieren? –

+0

Etwas außerhalb des Themas: Sie können auch [** '.map()' **] verwenden (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) als 'var objectIds = expensesIds.map (Funktion (id) {return new ObjectId (id);});' – chridam

Antwort

0

Sie benötigen allowExtendedOperators für Ihr Modell zu ermöglichen.

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

UPDATE

Auch gibt es ein Problem mit dem Filter.

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

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

Auch verwenden Sie integrierten Operatoren:

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

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

I aktiviert haben, dass bereits in meiner datasource.json .. – Subburaj

+0

Fehler 'Typeerror werfen: Argument muss ein string' sein – Subburaj

+0

@Subburaj und für Ihre 'TypeError'-Ausnahme müssen Sie IDs als Text senden –

1

wenn Sie Mungo verwenden dann versuchen, diese

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

oder einfach können Sie diese MongoDB mit tun

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

Bitte lassen Sie mich wissen, wenn dies Ihr Problem löst

Verwandte Themen