MongoDB / C#API - 如何确定嵌套文档是否存在

时间:2012-01-19 19:22:58

标签: c# api mongodb

新闻发布帖有很多“喜欢”

"Likes" : [

{
    userid: ObjectId(ae12bcd323421223),
    username: "user1",
    likedate: ISODATE(xxx)
},

{
    userid: ObjectId(ae12bcd323421224),
    username: "user2",
    likedate: ISODATE(xxx)
}


]

一个人只能喜欢一次帖子,因此用户名/用户名必须是唯一的。

我已经尝试过AddToSetWrapped - 但它显然失败了,因为DateTime不同,无论如何都会添加对象。我目前在阵列上没有唯一索引但可以在必要时更改它吗?

如何检查Likes数组中是否存在特定用户标识,只有在用户标识不存在时才添加它? (作为一个原子操作,还是作为两个操作)?

1 个答案:

答案 0 :(得分:1)

  

一个人只能喜欢一次帖子,因此用户名/用户名必须是唯一的。 [...]我目前在阵列上没有唯一索引但可以在必要时更改它吗?

请注意,唯一键不包括该方案。 document in MongoDB can never violate itself通过唯一约束。

但是,Update.AddToSetWrapped是正确的方法。你可以这样使用findAndModify

_db.FindAndModify<Post>(
   Query.And(
       Query.EQ("_id", post.Id), 
       Query.NE("Likes.userId", requestingUserId)), 
   Update.AddToSetWrapped("Likes", newLike));

这样,如果给定的用户ID已经存在'like',它将找不到帖子,因此不会调用更新。

相关问题