sql >> Databáze >  >> NoSQL >> MongoDB

Můj selektor $or ve výrazu shody spouštěče databáze nefunguje na druhé úrovni vnoření při konfiguraci spouštěče databáze

Takže jsem byl schopen tento problém obejít změnou dotazu tak, aby sledoval pole, které se aktualizuje ve stejnou dobu, ale není vnořené. Myslím, že problém s kontrolou vnořeného pole je v tom, že ChangeEvent updateDescription vlastnost neobsahuje skutečný vnořený objekt, který se změnil; místo toho obsahuje tečkovou reprezentaci změny. Pokud se tedy podíváte na Aktualizaci 2 v mém příspěvku uvidíte, že updatedFields má tuto hodnotu:{\"someOtherField\":310,\"message.fansNo\":1... místo {\"someOtherField\":310,\"message\":{\"fansNo\":1... . Pomocí message.fansNo v dotazu $match bude Mongo hledat tento tvar objektu:{\"message\":{\"fansNo\":1... , což se v tomto případě neshoduje. "Skutečným" řešením by zde mohlo být opuštění . v message.fansNo v mém výrazu shody, ale nepodařilo se mi to uvést do provozu (viz toto vlákno ).

Takže „řešení“, které pro mě fungovalo, je ve skutečnosti jen řešením, které funguje pro můj konkrétní případ použití:stalo se, že someOtherField je vždy aktualizován spolu s message.fansNo a someOtherField není vnořeno. Takže mohu porovnat someOtherField bez obav z hnízdění. Tento výraz mi v podstatě dává výsledky, které chci:

{
  "$or": [
    {
      "updateDescription.updatedFields.someOtherField": {"$exists":true}
    },
    {
      "updateDescription.updatedFields.someOtherField":{"$exists":true}
    }
  ]
}

Doufám, že to pomůže někomu dalšímu!




  1. Jak aktualizovat hodnotu konkrétního vloženého dokumentu v poli konkrétního dokumentu v MongoDB?

  2. více než jeden index 2dsphere, nevím, který spustit geoNear

  3. Jak MongoDB indexuje pole?

  4. Nasazení cloudových databází s ClusterControl 1.6