2017-01-03 4 views
1

Ich habe diese MongoDB query:Wie Aggregatabfrage durchzuführen mit dem Zustand

var array=[]; //some string values 

collection.aggregate(
    { $match: { '_id': { $in : array } } } 
) 

Aber diese Rückkehr ist keine Ergebnisse. Wie führe ich das durch?

+1

Sie Klammern fehlen. Die korrekte Syntax lautet collection.aggregate ([{$ match: {'_id': {$ in: array}}}]). Weitere Informationen finden Sie unter https://docs.mongodb.com/v3.2/aggregation/ – felix

+1

Verwenden Sie stattdessen ObjectID-Werte. – Sammaye

+0

funktioniert nicht mit [] – arunraj414

Antwort

0

Wie in den Kommentaren erwähnt, ist Ihr array Variable ein Array von Hex-String ex :["57f36e94517f72bc09ee761e"] Werte und für Mongo Shell, müssen Sie zuerst die String-Werte ObjectId s gegossen. Verwenden Sie die JavaScript-Methode map() , um das Casting in einer Liste durchzuführen.

Zum Beispiel:

Mongo Mantel

var array = ["585808969e39db5196444c07", "585808969e39db5196444c06"]; 
var ids = array.map(function(id){ return ObjectId(id); }); 

die Sie dann Abfrage der Aggregatfunktion wie in den folgenden

Die oben
db.collection.aggregate([ 
    { "$match": { "_id": { "$in" : ids } } } 
]) 

Verwendung ist im Wesentlichen der gleiche wie

db.collection.find({ "_id": { "$in": ids } }) 

Node.js

var {ObjectId} = require('mongodb'); // or ObjectID 
var ids = array.map(id => ObjectId.isValid(id) ? new ObjectId(id) : null;); 
+0

thnks in' mongoose' verwendet es funktioniert !! – arunraj414

Verwandte Themen