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

hoạt động đối sánh mongodb $ trong $ lookup để so sánh objectId không hoạt động như mong đợi

Hãy thử điều này

const { user } = req;

productsModels.aggregate([
            { $sort: { '_id': -1 } },
            { $limit: 10 },
            {
                $lookup: {
                    from: 'likes',
                    let: {productId:"$_id"},
                    pipeline: [
                        {
                            $match: {
                                $expr:{$eq:['$_id', '$$productId']}},
                                'userId': mongoose.Type.Object(user.id)
                            }
                        }
                    ],
                    as: 'liked'
                }
            },
        ]);}

Trong truy vấn của bạn, thiếu hai thứ

1) Chuyển đổi userid thành id đối tượng mongo, vì vậy chúng tôi đã sử dụng mongoose.Types.ObjectId

2) Bạn không thể sử dụng trường bộ sưu tập bên ngoài trực tiếp trong đường dẫn bên trong vì điều này bạn đã tạo biến tạm thời nên chúng tôi đã sử dụng let để khai báo và để khớp với trường nội bộ, chúng ta cần sử dụng $expr




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose Promise với bluebird và chữ viết

  2. Các chỉ mục MongoDB có liên tục khi khởi động lại không?

  3. MongoDB - Tìm tài liệu phù hợp với điều kiện nhất định cho các khóa trường không xác định

  4. chèn mongodb cho thấy 'các chuỗi trong tài liệu phải là UTF-8 hợp lệ'

  5. MongoDB nguyên tử findOrCreate:findOne, chèn nếu không tồn tại, nhưng không cập nhật