在我的场景中,集合中有作者,每个作者都有messages
,作者的每条消息都可以有events
。每个演员只允许执行一种动作一次。
db.people.ensureIndex({messages.messageEvents.eventName: 1, messages.messageEvents.actorId: 1}, {unique: true});
我添加了索引,但没有效果。正如您在下面看到的,我的文档包含三个元素,它们具有"eventName":"vote"
并且"actorId":"1234"
应该违反我的约束。
如何messageEvents
根据eventName
和actorId
字段确保数组中的唯一项?
实际上,我需要在没有第二次搜索和更新事件的情况下更新现有项目,而不是拒绝它。
{
"_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"
}
]
}
]
}