gpt4 book ai didi

node.js - Mongoose 有条件地填充子文档

转载 作者:可可西里 更新时间:2023-11-01 10:42:54 25 4
gpt4 key购买 nike

我有一个看起来像这样的模式:

var UserSchema = new Schema({
name : { type: String, required: true },
email : { type: String, lowercase: true },
fences : [{type: Schema.Types.ObjectId, ref: 'Group'}]
});

var GroupMemberSchema = new Schema({
user : { type: Schema.Types.ObjectId, ref: 'User', required: true },
status : { type: String, default : 'Invited' }
});

var GroupSchema = new Schema({
name : String,
members : [GroupMemberSchema],
type : String
});

组和用户导出为它们自己的集合。我有一个端点 api/users/me ,我想在其中获取我的用户和我的所有组。在组内,我想在我的成员中填充用户。我可以使用这段代码正常工作:

User.findOne({
_id: userId
})
.populate('groups')
.exec(function(err, user) {
if (err) return next(err);
if (!user) return res.json(401);

var options = {
path: 'groups.members.user',
model: 'User'
};

User.populate(user, options, function (err, user) {
return res.json(user);
});

});

但是,如果组类型 == 'Special',我不想填充每个成员的关联用户。我将如何设置选项来执行此操作?

最佳答案

您可以在填充中使用“匹配”属性。

像这样:

User.findOne({
_id: userId
})
.populate('groups')
.exec(function(err, user) {
if (err) return next(err);
if (!user) return res.json(401);

var options = {
path: 'groups.members.user',
model: 'User',
match: { 'group.type': { $ne: 'Special' } }
};

User.populate(user, options, function (err, user) {
return res.json(user);
});

});

关于node.js - Mongoose 有条件地填充子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32337537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com