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

Tra cứu MongoDB khi trường nước ngoài là một mảng

Bạn có thể sử dụng $ tra cứu với đường ống tùy chỉnh cái này sẽ cung cấp cho bạn 0 hoặc 1 kết quả và sau đó sử dụng $ size để chuyển đổi một mảng thành giá trị boolean duy nhất:

db.reports.aggregate([
    {
        $lookup: {
            from: "users",
            let: { report_id: "$_id" },
            pipeline: [
                {
                    $match: {
                        $expr: {
                            $and: [
                                { $eq: [ "$name", "Mike" ] },
                                { $in: [ "$$report_id", "$favorites" ] }
                            ]
                        }
                    }
                }
            ],
            as: "users"
        }
    },
    {
        $project: {
            _id: 1,
            name: 1,
            favorite: { $eq: [ { $size: "$users" }, 1 ] }
        }
    }
])

Ngoài ra, nếu bạn cần sử dụng phiên bản MongoDB thấp hơn 3.6, bạn có thể sử dụng $lookup thông thường và sau đó sử dụng $ filter để chỉ những người dùng có nameMike :

db.reports.aggregate([
    {
        $lookup: {
            from: "users",
            localField: "_id",
            foreignField: "favorites",
            as: "users"
        }
    },
    {
        $project: {
            _id: 1,
            name: 1,
            favorite: { $eq: [ { $size: { $filter: { input: "$users", as: "u", cond: { $eq: [ "$$u.name", "Mike" ] } } } }, 1 ] }
        }
    }
])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Không thể khởi chạy mongos

  2. Làm cách nào để lưu trữ Ngày và Giờ trong Meteor cho các truy vấn phạm vi?

  3. Lỗi khóa trùng lặp với chỉ mục duy nhất mongodb 2dsphere

  4. Chèn dữ liệu vào mảng bên trong trong MongoDB

  5. Gọi lại lưu của Mongoose hoạt động như thế nào?