新闻发布帖有很多“喜欢”
"Likes" : [
{
userid: ObjectId(ae12bcd323421223),
username: "user1",
likedate: ISODATE(xxx)
},
{
userid: ObjectId(ae12bcd323421224),
username: "user2",
likedate: ISODATE(xxx)
}
]
一个人只能喜欢一次帖子,因此用户名/用户名必须是唯一的。
我已经尝试过AddToSetWrapped - 但它显然失败了,因为DateTime不同,无论如何都会添加对象。我目前在阵列上没有唯一索引但可以在必要时更改它吗?
如何检查Likes数组中是否存在特定用户标识,只有在用户标识不存在时才添加它? (作为一个原子操作,还是作为两个操作)?
答案 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',它将找不到帖子,因此不会调用更新。