Wie zu verwenden MongoDBs Aggregat "$lookup " als " findOne()`

So, wie Sie alle wissen find() gibt ein array der Ergebnisse, mit findOne() Rückkehr nur einfach Objekt.

Winklig, das macht einen großen Unterschied. Anstatt {{myresult[0].name}} ich kann einfach nur schreiben {{myresult.name}}.

Habe ich festgestellt, dass die $lookup - Methode die Aggregat-pipeline liefert ein array der Ergebnisse statt nur ein einzelnes Objekt.

Ich habe zum Beispiel zwei colletions:

users Sammlung:

[{
  "firstName": "John",
  "lastName": "Smith",
  "country": 123
}, {
  "firstName": "Luke",
  "lastName": "Jones",
  "country": 321
}]

countries Sammlung:

[{
  "name": "Australia",
  "code": "AU",
  "_id": 123
}, {
  "name": "New Zealand",
  "code": "NZ",
  "_id": 321
}]

Mein Aggregat $lookup:

db.users.aggregate([{
  $project: {
    "fullName": {
      $concat: ["$firstName", " ", "$lastName"]
    },
    "country": "$country"
  }
}, {
  $lookup: {
    from: "countries",
    localField: "country",
    foreignField: "_id",
    as: "country"
  }
}])

Die Ergebnisse aus der Abfrage:

[{
  "fullName": "John Smith",
  "country": [{
    "name": "Australia",
    "code": "AU",
    "_id": 123
  }]
}, {
 "fullName": "Luke Jones",
 "country": [{
   "name": "New Zealand",
   "code": "NZ",
   "_id": 321
 }]
}]

Wie Sie sehen können von der oben angeführten Ergebnisse, die jeweils country ist ein array, anstatt ein einzelnes Objekt wie "country": {....}.

Wie kann ich meine $lookup Gegenzug ein einzelnes Objekt statt eines Arrays, da es immer nur mit einem einzelnen Dokument?

InformationsquelleAutor Fizzix | 2016-06-08
Schreibe einen Kommentar