我正在做一个由Nodejs和MongoDB支持的项目。我是MongoDB的新手,我不知道为什么当我发帖时,我经常(几乎总是)在集合中获得两个相同的记录。两个记录仅因ID而异,例如ObjectId("53aefb0fc68a0810504d2066")
和53aefb0fc68a0810504d2066
,这是正常的还是我做错了什么?谢谢你的任何指示。
这是一些节点代码:
server.js:
app.post("/:collection", function (req, res) {
var object = req.body;
var collection = req.params.collection;
collectionDriver.save(collection, object, function (err, docs) {
if (err) {
res.send(400, [err, object]);
} else {
res.send(201, docs);
}
});
});
collectionDriver:
save: function(collectionName, obj, callback) {
this.getCollection(collectionName, function(error, the_collection) {
if( error ) callback(error);
else {
obj.created_at = new Date();
the_collection.insert(obj, function() {
callback(null, obj);
});
}
});
},
getCollection: function(collectionName, callback) {
this.db.collection(collectionName, function(error, data) {
if (error) {
callback(error);
} else {
callback(null, data);
}
});
},
答案 0 :(得分:2)
每当你向MongoDB询问save
没有_id
字段的对象时,它会自动为该字段生成一个全新的全局唯一ObjectID,并将该对象保存在该ObjectID下。
如果要使用save
更新现有文档,则需要确保_id
字段填充了要更新的文档的_id
。< / p>
或者,您可以在您认为相关的字段上创建unique index,以确定哪些是重复内容,哪些内容不重复。但是,在这种情况下,尝试保存现有文档将引发错误而不是替换文档。