Как обеспечить уникальный элемент в массиве на основе определенных полей - mongoDB?
В моем сценарии есть авторы в коллекции, каждый автор имеетmessages
и каждое сообщение автора может иметьevents
, Каждому актеру разрешено выполнять только один вид действия один раз.
<code>db.people.ensureIndex({messages.messageEvents.eventName: 1, messages.messageEvents.actorId: 1}, {unique: true}); </code>
Я добавил индекс, но это не имеет никакого эффекта. Как вы видите ниже, мой документ имеет три элемента, которые имеют"eventName":"vote"
а также"actorId":"1234"
это должно быть против моего ограничения.
Как обеспечить уникальный предмет вmessageEvents
массив на основеeventName
а такжеactorId
поля?
На самом деле, мне нужно обновить существующий элемент без второго поиска и обновить событие, а не отклонить его.
<code>{ "_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" } ] } ] } </code>