Wie kann ein eindeutiges Element in einem Array sichergestellt werden, das auf bestimmten Feldern basiert - mongoDB?

In meinem Szenario gibt es Autoren in einer Sammlung, die jeder Autor hatmessages und jede nachricht des autors kann hatevents. Jeder Akteur darf nur eine Aktion ausführen.

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

Ich habe einen Index hinzugefügt, aber er hat keine Wirkung. Wie Sie unten sehen, hat mein Dokument drei Elemente, die haben"eventName":"vote" und"actorId":"1234" das sollte gegen meine einschränkung sein.

So stellen Sie sicher, dass der Artikel eindeutig istmessageEvents Array basierend aufeventName undactorId Felder?

Eigentlich muss ich das vorhandene Element ohne eine zweite Suche aktualisieren und Ereignis aktualisieren, anstatt es abzulehnen.

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage