2016-05-14 2 views
3

ich ein Array haben diemongodb node.js Dokument mit mehreren Ids in einem Array zu finden

array = [ '573163a52abda310151e5791', 
     '57358e5dbd2f8b960aecfa8c', 
     '573163da2abda310151e5792' ] 

wie diese Id einer mongodb Sammlung enthält, in meinem NodeJS Code möchte ich die Dokumente von all diesen finden IDs. Das Paket, das ich verwende, ist Mongoskin.

nach den Dokumenten ist dies der richtige Weg, um das Ergebnis zu finden, das gibt mir, was ich will. Aber hier statt direkter Werte mag ich das Array verwenden, aber nicht in der Lage, um herauszufinden, wie man das macht

db.coll.find({ 
       _id: { 
        $in: [mongoskin.helper.toObjectID("573163da2abda310151e5792"), 
          mongoskin.helper.toObjectID("57358e5dbd2f8b960aecfa8c"), 
          mongoskin.helper.toObjectID("573163a52abda310151e5791") 
        ] 
       } 
      }).toArray(function(err, docs) { 
       console.log(docs); 
       res.send(docs) 
      }); 

Antwort

3

Ich weiß nicht viel über mongoskin aber kann man dies versuchen ...

var newArray = oldArray.map(function(ele) { 
    return mongoskin.helper.toObjectID(ele); 
}); 
OR 
var newArray = oldArray.map(mongoskin.helper.toObjectID(ele)); 

So, jetzt können Sie newArray in Ihrer Anfrage

db.coll.find({ 
      _id: { 
       $in: newArray 
      } 
     }).toArray(function(err, docs) { 
      console.log(docs); 
      res.send(docs) 
     }); 
+0

dank es funktionierte, aber warum das Ergebnis, ich bin nicht in der gleichen Reihenfolge wie immer in der Anordnung festgelegt. Ist es möglich, das Ergebnis in der gleichen Reihenfolge zu erhalten? – Ankit

1

verwenden ich denke, dies ist nützlich für Sie

ObjectID = require('mongoskin').ObjectID; 
var array1 = ["5736d1210a39c2547cb9d90e","5736d1380a39c2547cb9d90f] 
var array2 = [] 
array1.forEach(function(stringId){ 
array2.push(new ObjectID(stringId))) 
}) 

dann diese array2 Variable in Abfrage verwenden

db.coll.find({ 
     _id: { 
      $in: array2 
     } 
    }).toArray(function(err, docs) { 
     console.log(docs); 
     res.send(docs) 
    }); 
Verwandte Themen