我使用addToSet
命令(添加UpdatedData
):
MyTable.update({ "UrlLink": "http://www.someurl.com"}, {
$addToSet: {
UpdatedData: {
TheDate: ThisDate,
NewInfo: ThisInfo
}
}
},
function (err, result) {
next(err,result)
}
);
但是,当我执行查询时(在UpdatedData
添加到我的文档之后),我看到它返回两个文档。而不只是一个更新的document
:
db.MyTable.find( {"UrlLink": "http://www.someurl.com"})
{ "_id" : ObjectId("56485922143a886f66c2f8bb"), "UrlLink" : "http://www.someurl.com", "Stuff" : "One", "UpdatedData" : [ { "TheDate" : "11/15/2015", "NewInfo" : "Info1", "_id" : ObjectId("5648599a71efc79c660f76d3") } ] }
{ "_id" : ObjectId("5648599f71efc79c660f76d4"), "UrlLink" : "http://www.someurl.com", "Stuff": "One", "UpdatedData" : [ ] }
所以似乎addToSet
使用新的_id
创建了一个新文档,而不是更新旧记录(ObjectId("5648599f71efc79c660f76d4")
)。但我只在robomongo
(ObjectId("56485922143a886f66c2f8bb")
)中看到了更新的文档。任何想法为什么会发生这种情况以及如何防止这种行为?
答案 0 :(得分:1)
"Karly"
无法创建新文档,只能update
存在。
这看起来你已经用相同的url创建了两个文件。然后当你更新它时只更新第一个..
要阻止使用已存在的网址创建文档,您可以创建索引并将其设置为唯一
update
这会阻止使用相同的网址创建新文档,并且还会尽快通过 UrlLink 进行查询。