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

Mongoose získá dokumenty odpovídající poli

Pokud si uvědomíte, že se shodujete s ObjectId a ne s ničím v odkazované kolekci, můžete použít $in operátor:

db.collection.find({ "members": { "$in": [ "some id 1", "some id 2" ] } })

Kde jsou samozřejmě vaše skutečné hodnoty ObjectId.

Ale pokud opravdu myslíte dokument, který má přesně toto pole, pak pole prostě předáte:

db.collection.find({ "members": [ "some id 1", "some id 2" ] })

A pokud musí mít oba prvky, ale může mít i další, pak v současné době musíte použít $and výraz:

db.collection.find({ "$and": [ 
    { "members": "some id 1" },
    { "members": "some id 2" } 
]})

Ale od verze 2.6 a dále můžete správně používat $all operátora, aby efektivně udělal totéž:

db.collection.find({ "members": { "$all": [ "some id 1", "some id 2" ] } })

Druhá forma odpovídá pouze těmto dvěma prvkům, ale v libovolném pořadí. Existují tedy dva přístupy:

db.collection.find({ "$or": [
    { "members": [ "some id 1", "some id 2" ] },
    { "members": [ "some id 2", "some id 1" ] }
]})

Toto používá logický $or říci, že pole musí být přesné, ale může být uspořádáno oběma způsoby. A druhý přístup:

db.collection.find({ "$and": [ 
    { "members": "some id 1" },
    { "members": "some id 2" }
    { "members": { "$size": 2 } }
]})

Toto by tedy použilo $size abychom se ujistili, že když pole obsahovalo oba prvky, které se shodovaly, mělo také pouze dva Prvky. Což je hezčí syntaxe než použití $or , zejména pro větší pole.

A v budoucích vydáních, jak bylo zmíněno, to bude ještě čistší:

db.collection.find({ "$and": [ 
    { "members": { "$all": [ "some id 1", "some id 2" ] } },
    { "members": { "$size": 2 } }
]})

To do značné míry pokrývá každou interpretaci




  1. Synchronizujte MongoDB přes ssh

  2. Použití C# MongoDB LINQ s diskriminátorem

  3. Naplňte výběrové pole z kolekce a filtrujte podle vybrané hodnoty v meteoru

  4. Nelze se připojit k serveru Redis pomocí poskytovatele stavu relace ASP.NET