gpt4 book ai didi

javascript - 如何编写 Mongoose 查询来过滤子文档

转载 作者:可可西里 更新时间:2023-11-01 09:26:55 25 4
gpt4 key购买 nike

我有一个名为“Users”的 Mongoose 模式,它有一个“Roles”子文档作为其变量之一,如下所示:

var UserSchema = new mongoose.Schema({
email: { type: String, required: true, unique: true },
password: { type: String, required: true },
roles: [ { type: Number, ref: 'Role' } ]
});

var RoleSchema = new mongoose.Schema({
_id: Number,
name: { type: String, required: true, unique: true },
description: { type: String, required: true }
});

我想创建一个 Mongoose 查询来查找 Angular 色名称为“admin”或“owner”的所有用户。我试过使用这个查询,我认为它会起作用,但是当我使用 where...in 部分时我没有得到任何用户。

var roles = ["owner", "admin"];
User.find()
.populate('roles')
.where('roles.name').in(roles)
.sort({'_id': 1})
.exec(function (err, users) {
res.send(users);
});

有人能告诉我我的逻辑哪里错了吗?

最佳答案

不可能用一个查询查询多个集合。如果 RoleUser 中的嵌入子文档,那么您可以对 roles.name 进行查询,但目前不支持,因为它是一个单独的集合在 User 中引用。

但是,解决方法是在查询返回后添加另一个过滤步骤,手动过滤掉没有任何 Angular 色匹配填充条件的文档,但首先您需要在填充中使用匹配查询而不是 where 方法:

var roles = ["owner", "admin"];
User.find()
.populate('roles', null, { name: { $in: roles } } )
.sort({'_id': 1})
.exec(function (err, users) {
users = users.filter(function(user){
return user.roles.length;
});
res.send(users);
});

关于javascript - 如何编写 Mongoose 查询来过滤子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30358926/

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