gpt4 book ai didi

javascript - 填充 Mongoose 后查找

转载 作者:IT老高 更新时间:2023-10-28 13:13:11 24 4
gpt4 key购买 nike

在 Mongoose 填充后,我在通过文档内部匹配的值查询文档时遇到了一些问题。

我的架构是这样的:

var EmailSchema = new mongoose.Schema({
type: String
});

var UserSchema = new mongoose.Schema({
name: String,
email: [{type:Schema.Types.ObjectId, ref:'Email'}]
});

例如,我希望所有用户的电子邮件类型为“Gmail”。

以下查询返回空结果:

Users.find({'email.type':'Gmail').populate('email').exec( function(err, users)
{
res.json(users);
});

我不得不像这样在 JS 中过滤结果:

users = users.filter(function(user)
{
for (var index = 0; index < user.email.length; index++) {
var email = user.email[index];
if(email.type === "Gmail")
{
return true;
}
}
return false;
});

有没有办法直接从 Mongoose 那里查询类似的东西?

最佳答案

@Jason Cust 已经很好地解释了它 - 在这种情况下,最好的解决方案通常是更改架构以防止通过存储在单独集合中的文档的属性来查询 Users .

这是我能想到的最好的解决方案,但不会强制你这样做(因为你在评论中说你不能)。

Users.find().populate({
path: 'email',
match: {
type: 'Gmail'
}
}).exec(function(err, users) {
users = users.filter(function(user) {
return user.email; // return only users with email matching 'type: "Gmail"' query
});
});

我们在这里所做的是仅填充 email 的匹配附加查询(.populate() 调用中的 match 选项) - 否则Users 文档中的 email 字段将设置为 null

剩下的就是返回的 users 数组上的 .filter ,就像你原来的问题一样——只有更简单、非常通用的检查。如您所见 - email 存在或不存在。

关于javascript - 填充 Mongoose 后查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31357745/

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