在我的场景中,一个集合中有作者,每个作者有messages
个,每个作者的信息可以有events
个.每个演员只允许表演一种动作一次.
db.people.ensureIndex({messages.messageEvents.eventName: 1, messages.messageEvents.actorId: 1}, {unique: true});
我添加了索引,但没有效果.正如你在下面看到的,我的文档有三个元素,分别是"eventName":"vote"
和"actorId":"1234"
,这应该是我的限制.
如何确保基于eventName
和actorId
字段的messageEvents
数组中的唯一项?
实际上,我需要更新现有项目,而不需要第二次搜索和更新事件,而不是拒绝它.
{
"_id": "1234567",
"authorPoint": 0,
"messages": [
{
"messageId": "112",
"messageType": "Q",
"messagePoint": 0,
"messageEvents": [
{
"eventName": "Add",
"actorId": "1234",
"detail": ""
},
{
"eventName": "Vote",
"actorId": "1234",
"detail": "up"
},
{
"eventName": "Vote",
"actorId": "1234",
"detail": "down"
},
{
"eventName": "Vote",
"actorId": "1234",
"detail": "cork"
}
]
}
]
}