MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB $lookup dopasowanie potoku według _id nie działa

Miałem też kłopoty podczas używania $lookup z mangustą, aby dopasować _id, ponieważ moja kolekcja przechowuje odwołanie jako String, a nie ObjectId

Model A:{_id:ObjectId("xxx"), b_id:"eeeeee"}

Model B:{_id:ObjectId("eeeeee")}

MyCollectionA.aggregate([
   {
      $lookup: {
        from: "collectionb",
        let: {id: "$b_id"},
        pipeline: [{$match: {$expr: {$eq: ["$_id", "$$id"]}}}],
        as: b
      }
])

W tym przykładzie b nigdy nie jest wypełniane, ponieważ $$id nie jest uważany za ObjectId

Po prostu dodaj projekt, aby przekształcić $$id w objectId i jego działanie

MyCollectionA.aggregate([
   {
      $lookup: {
        from: "collectionb",
        let: {id: "$b_id"},
        pipeline: [
           {$project: {_id: 1, bid: {"$toObjectId": "$$id"}}},
           {$match: {$expr: {$eq: ["$_id", "$bid"]}}}
        ],
        as: b
      }
])

Lub z ForeignField, localField:

MyCollectionA.aggregate([
   {
      $project:{
        _id: 1,
        b_id: {"$toObjectId": "$b_id"}
      }
   },
   {
      $lookup: {
        from: "collectionb",
        localField: "b_id",
        foreignField: "_id",
        as: b
      }
])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zaktualizuj podzbiór pól za pomocą Mongoose

  2. mapowanie w tworzeniu indeksu w elasticsearch przez rzekę mongodb nie działa

  3. Zmień typ danych z ciągu na datę, pomijając brakujące dane

  4. MongoDB - $addToSet na liście dokumentów osadzonych

  5. Jak zainstalować MongoDB Community Edition na Ubuntu?