2016-12-22 3 views
0

Ich habe ein Problem in der manuellen Referenz. Kann jemand helfen? Ich habe die folgenden zwei Sammlungen in 'User' Datenbank:Mongo Db Handbuch Referenz

MongoDB Enterprise > db.myUser.find().pretty() 
{ 
     "_id" : ObjectId("585beb14efb2d0abae8bcfe5"), 
     "name" : "Tom Benzamin", 
     "contact" : "987654321", 
     "dob" : "01-01-1991", 
     "address" : [ 
       ObjectId("58599187efb2d0abae8bcfdf"), 
       ObjectId("58599187efb2d0abae8bcfe0") 
     ] 
} 

MongoDB Enterprise > db.myAddress.find().pretty() 
{ 
     "_id" : ObjectId("58599187efb2d0abae8bcfdf"), 
     "building" : "22 A, Indiana Apt", 
     "pincode" : 123456, 
     "city" : "Los Angeles", 
     "state" : "california" 
} 

Auswahl Adresse von 'myUser Sammlung zu folgenden Ergebnissen führen Variable:

MongoDB Enterprise > var result = db.myUser.find({},{_id:0,address:1}) 

MongoDB Enterprise > result 
{ "address" : [ ObjectId("58599187efb2d0abae8bcfdf"), ObjectId("58599187efb2d0abae8bcfe0") ] } 

die Daten aus meineadresse Sammlung Fetch von myUser Kollektion passend:

MongoDB Enterprise > var Final = db.myAddress.find({_id:{$in:result["address"]}} 
) 

Unten ist der Fehler:

MongoDB Enterprise > Final 
Error: error: { 
     "ok" : 0, 
     "errmsg" : "$in needs an array", 
     "code" : 2, 
     "codeName" : "BadValue" 
} 

Wie behebt man dieses Problem?

Antwort

1

Der in der Abfrage find() zurückgegebene Wert ist ein Cursor. Wenn Sie also den Wert drucken, wird der Cursor wiederholt und der Wert wird gelöscht. Wenn Sie den Inhalt auf "halten" wollen, dann rufen Sie .next() (als cdbajorin vorgeschlagen) oder .ToArray()

> var result = db.myUser.find({},{_id:0,address:1}).next() 

> result 
    { 
     "address" : [ 
      ObjectId("58599187efb2d0abae8bcfdf"), 
      ObjectId("58599187efb2d0abae8bcfe0") 
     ] 
    } 

>var Final = db.myAddress.find({_id:{$in:result.address}}) 

>Final 

{ "_id" : ObjectId("58599187efb2d0abae8bcfdf"), "building" : "22 A, Indiana Apt", "pincode" : 123456, "city" : "Los Angeles", "state" : "california" } 
+1

statt 'toArray()', könnten Sie 'next()', so dass Sie müssen nicht auf die Array-Position zugreifen. – cdbajorin

+0

Vielen Dank für Ihre Antwort. Woher wissen Sie, dass es einen Cursor zurückgegeben hat? – Ravi

+0

@Ravi, weil es in der [Dokumentation] (https://docs.mongodb.com/v3.2/reference/method/db.collection.find/#db.collection.find) für '.find()' steht – cdbajorin