que tengo una colección suceso que voy a través de encontrar una categoría para el evento específico y entonces estoy actualizando mi otra colección usando un empuje $ declaración. El problema es que cuando dos eventos tienen la misma categoría crearán un duplicado, que no quiero.Empuje un elemento de una matriz si no está presente (sin duplicados)
que sé de upserts pero no estoy seguro si son el mejor camino a seguir con respecto a esto? Y estoy un poco confundido cuando se trata de cómo escribir un upsert que funcione con la declaración "$ push".
Así es como mi actualización se ve ahora:
self.users.update({"user_id": event['userid']}, {'$push': {'campaigns': UserCampaign}})
..where:
UserCampaign = {
"id": campaign['id'],
"name": campaign['name']
}
El "UserCampaign" se llena con la misma información de vez en cuando, y ya que mi la colección probablemente sea muy grande. Quiero completar esto de la manera más eficiente posible.
TLDR; Quiero actualizar la matriz en el documento encontrado usando un "push" sin tener el riesgo de obtener duplicados.
ah, he apuntado varios otros al operador $ addToSet antes, pero creo que la forma en que se formuló la pregunta jugó en las respuestas que se relacionan con las respuestas en lugar de agregar a una matriz de elementos, especialmente cuando su última pregunta resumen explícitamente dice: "actualice mi colección usando un" push "" cuando quiere decir algo como: actualice la matriz en el documento usando un push sin tener elementos duplicados. Edité la pregunta para reflejar mejor sus necesidades reales –
Sí, entiendo que podría ser difícil para ustedes saber lo que necesito. Fue mi pobre explicación del problema la culpable. Lo siento, pero encontré una solución de trabajo y por qué específicamente señalé $ push en el título porque realmente pensaba que era lo que terminaría usando. De todos modos, leí sobre $ addToSet y al instante supe que era el operador el que resolvería mi problema. Gracias por su ayuda y actualicé este hilo para que las personas tan confundidas como yo en el futuro pudieran corregirse, como yo lo hice. – Ms01