gpt4 book ai didi

node.js - 在更新之前检查 Mongoose 数组中的嵌套对象 key[value]

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

我正在尝试使用 $addToSet 将新对象插入到使用 mongoose 的 mongo 数组中:

我有两个型号:

var itemSchema = mongoose.Schema({
itemId: Number,
save_date: {type: Date, default: Date.now}
});

var UserSchema = new Schema({
...
items: [itemSchema]
});

var User = mongoose.model('User', UserSchema);

我想使用 mongoose 将 item 添加到 items 数组中,但前提是该项目不存在。

目前,使用 $addToSet 仍然会添加重复项,因为我假设每个项目的 save_date 标记都不同:

  User.findByIdAndUpdate(
id,
{$addToSet: {item: {itemId: newItem} } },
{upsert: true},
function (err, saveItem){
if (err) {return handleError(err)};
res.send(saveItem);
}
);

这会导致用户输入:

"name": "Vinnie James"
"items" : [
{
"itemId" : 123,
"_id" : ObjectId("587b10259233c524454d745d"),
"save_date" : ISODate("2017-01-15T06:01:09.850Z")
},
{
"itemId" : 123,
"_id" : ObjectId("587b17398ed7052b1e5196bc"),
"save_date" : ISODate("2017-01-15T06:31:21.263Z")
}
]

是否可以在添加条目之前检查 itemId 是否存在,以避免出现如上所示的两个 "itemId": 123

如果有更好的方法来构建模型以达到相同的结果,我也很乐意考虑

最佳答案

试试这个方法:

User.findOneAndUpdate(
{_id: id, "items.itemId": {$nin:[newItem.itemId]}},
{$push: {items: newItem }},
{new: true}
function (err, updatedUser){
if (err) {return handleError(err)};
res.send(updatedUser);
}
);

$nin 运算符将确保项目中不存在与 newItemitemId 相同的项目。然后,如果成功,newItem 将由 $push 运算符添加。 {new: true} 告诉 mongo 在提供的回调中传递更新的文档

关于node.js - 在更新之前检查 Mongoose 数组中的嵌套对象 key[value],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41658648/

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