【发布时间】:2017-01-15 16:59:05
【问题描述】:
我正在尝试使用 $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?
如果有更好的方法来构建模型以实现相同的结果,我也很乐意考虑
【问题讨论】:
-
我想我可以先对项目运行一个数据库查询,并且只在
itemId不存在时才进行更新,但这感觉有点绕
标签: node.js mongodb express mongoose