MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Đối sánh đường ống tra cứu MongoDB $ của _id không hoạt động

Tôi cũng gặp sự cố khi sử dụng $ lookup với mongoose để cố gắng đối sánh _id vì bộ sưu tập của tôi lưu trữ tham chiếu dưới dạng Chuỗi chứ không phải ObjectId

Mô hình A:{_id:ObjectId ("xxx"), b_id:"eeeee"}

Mô hình B:{_id:ObjectId ("eeeee")}

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

Trong ví dụ này, b không bao giờ được điền vì $$ id không được coi là ObjectId

Chỉ cần thêm một dự án để chuyển đổi $$ id trong objectId và nó đang hoạt động

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

Hoặc với 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. Node - Mongoose 3.6 - Sắp xếp truy vấn với trường phổ biến

  2. Thực thi Mongo như Truy vấn (JSON) thông qua Java

  3. Chọn Max () với nhóm theo mongodb

  4. MongoDB:Tổng hợp sử dụng $ cond với $ regex

  5. MongoDB tìm trong bộ sưu tập với khóa không xác định