![](/img/trans.png)
[英]MongoDB and mongoose: how to add an object if it doesn't already exist
[英]add item to array if it doesn't exist mongodb
我正在使用mongoDB
+ nodejs
运行一个简单的应用程序,我正在尝试实现以下目标:
单位属于公司,教室属于单位,用户属于教室。
在某个时刻,我想将用户添加到另一个单元或/和教室,然后他将属于 2 个或更多单元/教室。
我的表格每次只发送一个单元/教室,在这种情况下,我想将其添加到用户 model unit:[string]
和classroom:[string]
],前提是他以前不属于它。 所以我需要检查arrays是否已经有发送的数据,如果没有,添加它。
Mongo 有$addToSet
属性和$ne
来做这件事,但我似乎无法让它工作。
这是我的代码:
User.findById(req.body._id)
.select("-__v")
.exec((err: Error, user: any) => {
if (err) {
// display error
}
if (!user) {
// display error
}
user.update({
unit: {
$ne: user.unit
},
classroom: {
$ne: user.classroom
}
}, {
$addToSet: {
unit: req.body.unit,
classroom: req.body.classroom
}
}).exec((err: Error) => {
if (err) {
// Display error
}
res.status(200).json({
status: "OK",
response: response,
})
return
})
它属于“Academy one”和classic id reference,我会将他添加到“Academy 2”这样的另一个单元并添加另一个教室引用,但是如果我将他添加到“Academy One”的另一个教室,我不想要其单位数组中的重复项。
当我通过postman
发布以下内容时,它给了我错误:
{
"_id":"5d8ba151248ecb4df8803657", // user id
"unit":"Test", // another unit
"classroom":"5d8a709f44f55e4a785e2c50" // another classroom
}
回复:
{ "status": "NOK", "response": "Cast to [string] failed for value \"[{\"$ne\":[\"Academy One\"]}]\" at path \"unit \"" }
我错过了什么?
实际上,我不需要$ne
运算符,我只需要直接使用$addToSet
user.updateOne({
$addToSet: { unit: req.body.unit, classroom: req.body.classroom }
}).exec((err: Error) => {
谢谢!
您需要使用$nin
而不是$ne
, https://docs.mongodb.com/manual/reference/operator/query/nin/
unit: {$nin: [user.unit]}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.