В моем сценарии есть авторы в коллекции, каждый автор имеет 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"
}
]
}
]
}