db.collection.find在addToSet之后返回多个记录

时间:2015-11-15 16:55:08

标签: mongodb updates

我使用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"))。但我只在robomongoObjectId("56485922143a886f66c2f8bb"))中看到了更新的文档。任何想法为什么会发生这种情况以及如何防止这种行为?

1 个答案:

答案 0 :(得分:1)

"Karly"无法创建新文档,只能update存在。 这看起来你已经用相同的url创建了两个文件。然后当你更新它时只更新第一个..

要阻止使用已存在的网址创建文档,您可以创建索引并将其设置为唯一

update

这会阻止使用相同的网址创建新文档,并且还会尽快通过 UrlLink 进行查询。