gpt4 book ai didi

node.js - 尝试删除 Mongoose 中的子文档会出现内部 mongoose 错误

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

我的架构如下(简化):

var Permission = new Schema({
_id: String, // email address
role: String // "admin" or "member"
});

var Org = new Schema({
name: {type: String, index: {unique: true, dropDups: true}, trim: true},
permissions: [Permission]
});

示例文档如下所示:

{
"name": "My Org",
"permissions" : [
{"_id" : "joe@gmail.com", "role" : "admin"},
{"_id" : "mary@gmail.com", "role" : "member"}
]
}

我正在尝试使用命令org.permissions.remove(req.params.email)删除权限行之一,如下面的上下文所示:

exports.removePermissions = function(req, res) {
var name = req.params.name;
return Org
.findOne({name: name})
.select()
.exec(function(err, org) {
if (err) return Org.handleError(res, err);
if (!org) return Org.handleError(res, new Error("#notfound " + name));
org.permissions.remove(req.params.email);
org.save(function(err, org) {
if (err) return Org.handleError(res, err);
else return res.send(org);
});
});
};

当我这样做时,我收到以下错误:

TypeError: Cannot use 'in' operator to search for '_id' in joe@gmail.com
at EmbeddedDocument.Document._buildDoc (/../node_modules/mongoose/lib/document.js:162:27)
at EmbeddedDocument.Document (/../node_modules/mongoose/lib/document.js:67:20)
at EmbeddedDocument (/../node_modules/mongoose/lib/types/embedded.js:27:12)
at new EmbeddedDocument (/../node_modules/mongoose/lib/schema/documentarray.js:26:17)
at MongooseDocumentArray._cast (/../node_modules/mongoose/lib/types/documentarray.js:62:10)
at Object.map (native)
at MongooseDocumentArray.MongooseArray.remove (/../node_modules/mongoose/lib/types/array.js:360:21)
at model.Org.methods.removePermissions (/../models/org.js:159:20)

我唯一能想到的是Mongoose不支持非ObjectID的_id字段?这很奇怪,因为我在代码中的其他地方使用了这些并且它工作正常(例如 org.permissions.id("joe@gmail.com") 工作)。

非常感谢任何建议!

最佳答案

我不确定为什么使用 remove 不起作用,但您可以使用 findOneAndUpdate 原子地执行此操作和 $pull运算符:

exports.removePermissions = function(req, res) {
var name = req.params.name;
return Org.findOneAndUpdate(
{name: name},
{$pull: {permissions: {_id: req.params.email}}},
function(err, org) {
// org contains the updated doc
...
});
};

关于node.js - 尝试删除 Mongoose 中的子文档会出现内部 mongoose 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14244767/

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