我在mongoDB中使用嵌入式数组,Document看起来与下面相同
{
"_id" : ObjectId("516f89b393307a0f73533863"),
"desc" : "LrOBVgWHHRyAxgYdKIwwgATcGTNBlz",
"comments" :[
{
"comment" : "superb",
"likeOrUnlike" : [
{"name":"kk",
"date":"2013/04/11",
"like":true
}
]
}
]
"date" : ISODate("2013-04-18T05:50:43.112Z"),
"title" : "OaTHxDDMoINSaZCHCSNpJLNQyrqXGZ"
}
我想update
注释中likeOrUnlike数组中的日期和类似字段,在这种情况下无法进行自动更新,所以我想通过代码手动完成(检索整个文档和更新),
在这种情况下会发生并发问题
scenario :
如果两个人同时喜欢同一条评论。
所以解决方案是锁定特定的更新功能
var updateComments = function(id,data){
db.posts.findOne({"_id" :id},function(err,res){
// stuff
//mongo update
});
};
我无法发布整个代码。
我的问题是
如何锁定node.js中的函数?
锁定node.js函数是不错的做法?
答案 0 :(得分:1)
http://docs.mongodb.org/manual/reference/operator/positional/
使用mongodb位置运算符更新数组中的对象
答案 1 :(得分:0)
锁定应该是最后的手段。使用$ push(http://docs.mongodb.org/manual/reference/operator/push/)或其他集合。