यह arrayElemAt के सिंटैक्स से है
जिसका अर्थ है कि आप अपने सरणी तत्वों का निर्माण कर सकते हैं, हालांकि आप चाहते हैं। आपके मामले में आप केवल नाम चाहते हैं। तो यह काम करना चाहिए:
[{
$match: {
jobCategoryId: mongoose.Types.ObjectId(jobCategoryId)
}
}, {
$lookup: {
from: 'users',
localField: 'userId',
foreignField: '_id',
as: 'user'
}
}, {
$project: {
_id: 1,
description: 1,
title: 1,
user: {
name: {
$arrayElemAt: ["$user.name", 0]
}
}
}
}]
अपडेट का पालन करें :यह पूछा गया था कि name
. के शीर्ष पर अतिरिक्त गुण कैसे प्राप्त करें . ये रहा प्रोजेक्ट:
{
$project: {
_id: 1,
description: 1,
title: 1,
user: {
name: {
$arrayElemAt: ["$user.name", 0]
},
email: {
$arrayElemAt: ["$user.email", 0]
}
}
}
}
दूसरा अनुवर्ती जैसा कि ड्रैग0 ने टिप्पणियों में पूछा:यदि उपरोक्त पर्याप्त नहीं है क्योंकि परिणाम एक उपयोगकर्ता उत्पन्न करते हैं:[] किसी ऑब्जेक्ट उपयोगकर्ता के बजाय आकार 1 की सरणी:{} निम्नलिखित का उपयोग किया जा सकता है।
{
$project: {
_id: 1,
description: 1,
title: 1,
user: {
$let: {
vars: {
firstUser: {
$arrayElemAt: ["$user", 0]
}
},
in: {
name: "$$firstUser.name",
email: "$$firstUser.email"
}
}
}
}
}