gpt4 book ai didi

node.js - ExpressJS 和 MongooseJS : can I query array values in a subdocument?

转载 作者:太空宇宙 更新时间:2023-11-03 23:10:25 25 4
gpt4 key购买 nike

我有一个使用expressjs和mongoosejs编写的Web api。

应用程序中的主架构包含一个子文档permissions,其中包含数组字段。这些数组包含可以对该文档执行操作的用户 ID。

我试图通过 read 子文档数组字段中的值来限制对该集合的查询结果:

这是主要架构:

var MainSchema = new Schema({
uri: { type: String, required: false },
user: { type: String, required: false },
groups: [String],
tags: [String],
permissions: {
read: [String],
update: [String],
delete: [String]
}
});

我想返回在 permissions.read 数组中具有特定值或该数组为空的文档。

我的代码不会抛出错误,但不会限制结果;我仍然收到与给定值不匹配且不为空的文档。

这是我得到的:

var MainModel = mongoose.model('MainSchema', MainSchema);

app.get('/api/search', function (req, res) {
var query = MainModel.find({'uri': req.query.uri });

// This works fine
if (req.query.groups) {
query.where('groups').in(req.query.groups);
}
else if (req.query.user) {
query.where('user').equals(req.query.user);
}

// How can I return only documents that match req.query.user or ""?
query.where('permissions.read').in([req.query.user, ""]);

query.exec(function (err, results) {
if (!err) {
return res.send(results);
} else {
return console.log(err);
}
});
});

我有预感,where 子句不会根据传递给 in 子句的数组的每个值来测试 permissions.read 每个元素的值。

谢谢。

编辑:这是一个不应返回的文档,但却是(注意,permissions.read 数组包含一个不是当前用户 ID 的值):

{
"user": "firstname@gmail.com",
"uri": "http://localhost:3000/documents/test",
"permissions": {
"delete": [
"firstname@gmail.com"
],
"update": [
"firstname@gmail.com"
],
"read": [
"firstname@gmail.com"
]
},
"tags": [],
"groups": [
"demo",
"2013"
]
}

已编辑:更正了模型/架构困惑,这不在我的代码中,但在复制/粘贴中被遗漏了。谢谢。

最佳答案

我已经寻找但没有找到 mongodb/mongoose 查询的示例,该查询测试子文档数组字段中的指定值或空数组字段。

相反,由于我控制 API(此代码来自)和客户端应用程序,所以我进行了重构。

我现在根据客户端用户选择向查询添加三个 where 子句之一:

if (req.query.mode === 'user') {
query.where('user').equals(req.query.user);
}
else if (req.query.mode === 'group') {
query.where('groups').in(req.query.groups);
query.$where('this.permissions.read.length === 0');
}
else if (req.query.mode === 'class') {
query.$where('this.permissions.read.length === 0');
}

感谢您的意见,@JohnnyHK。

关于node.js - ExpressJS 和 MongooseJS : can I query array values in a subdocument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15033077/

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