在mongoose中,可以使用聚合管道操作符 $map
和 $filter
来编写只返回嵌套数组中匹配的对象Id的查询。
首先,我们需要使用 $match
操作符来筛选出符合条件的文档。在 $match
中,我们可以使用 $elemMatch
来匹配嵌套数组中的对象。
接下来,我们使用 $project
操作符来进行投影操作,只返回我们需要的字段。在 $project
中,我们可以使用 $map
操作符来遍历嵌套数组,并返回匹配条件的对象Id。
下面是一个示例代码:
const mongoose = require('mongoose');
const schema = new mongoose.Schema({
nestedArray: [{
objectId: {
type: mongoose.Schema.Types.ObjectId,
required: true
}
}]
});
const Model = mongoose.model('Model', schema);
async function findMatchingObjects() {
const result = await Model.aggregate([
{
$match: {
nestedArray: {
$elemMatch: {
objectId: { $eq: 'your_matching_object_id' }
}
}
}
},
{
$project: {
matchedIds: {
$map: {
input: '$nestedArray',
as: 'item',
in: {
$cond: [
{ $eq: ['$$item.objectId', 'your_matching_object_id'] },
'$$item.objectId',
false
]
}
}
}
}
}
]);
console.log(result);
}
findMatchingObjects();
在上面的代码中,我们首先定义了一个包含嵌套数组的模式。然后,我们使用 aggregate
方法来执行聚合查询。在 $match
中,我们使用 $elemMatch
来匹配嵌套数组中的对象Id。在 $project
中,我们使用 $map
来遍历嵌套数组,并返回匹配条件的对象Id。
请注意,上述代码中的 'your_matching_object_id'
部分需要替换为实际的匹配对象Id。
推荐的腾讯云相关产品是腾讯云数据库 MongoDB,它是一种高性能、可扩展的 NoSQL 数据库服务,适用于存储大规模结构化和非结构化数据。您可以通过以下链接了解更多信息:
腾讯云数据库 MongoDB:https://cloud.tencent.com/product/mongodb
领取专属 10元无门槛券
手把手带您无忧上云