![](/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.