¿Cómo garantizar un elemento único en una matriz basada en campos específicos - mongoDB?

En mi escena, hay autores en una colección, cada autor tienemessages y cada mensaje de autor puede tenerevents. Cada actor permitió realizar un solo tipo de acción una vez.

<code>db.people.ensureIndex({messages.messageEvents.eventName: 1, messages.messageEvents.actorId: 1}, {unique: true});
</code>

Agregué índice pero no tiene efecto. Como se ve a continuación, mi documento tiene tres elementos que tienen"eventName":"vote" y"actorId":"1234" Eso debería estar en contra de mi constricción.

Cómo asegurar un artículo único enmessageEvents matriz basada eneventName yactorId campos ?

En realidad, necesito actualizar el elemento existente sin una segunda búsqueda y actualizar el evento en lugar de rechazarlo.

<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>

Respuestas a la pregunta(1)

Su respuesta a la pregunta