MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $lookup pipeline match by _id не работи

Аз също имах проблеми, докато използвах $lookup с mongoose, за да се опитам да съпоставя _id, тъй като моята колекция съхранява препратката като низ, а не ObjectId

Модел A:{_id:ObjectId("xxx"), b_id:"eeeee"}

Модел B:{_id:ObjectId("eeeee")}

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

В този пример b никога не се попълва, тъй като $$id не се счита за ObjectId

Просто добавете проект, за да трансформирате $$id в objectId и да работи

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

Или с 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. Променете и пуснете отново MongoDB oplog

  2. NodeJS Knox Formidable води до 400, файлът не е качен в S3 Bucket

  3. Свойството „x“ на Mongoose не съществува в тип „Документ“

  4. @CompoundIndex не работи в Spring Data MongoDB

  5. Параметърът на MongoDB проекция не работи в findOne()