आप $lookup का उपयोग कर सकते हैं कस्टम पाइपलाइन
जो आपको 0
. देगा या 1
परिणाम और फिर $size
का उपयोग करें किसी सरणी को एकल बूलियन मान में बदलने के लिए:
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 ] }
}
}
])
वैकल्पिक रूप से यदि आपको 3.6 से कम MongoDB संस्करण का उपयोग करने की आवश्यकता है तो आप नियमित $lookup
. का उपयोग कर सकते हैं और फिर $filter
का उपयोग करें केवल उन उपयोगकर्ताओं को प्राप्त करने के लिए जहां name
Mike
है :
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 ] }
}
}
])