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

Ovladač C# MongoDB:Nemohu najít způsob, jak spustit složitý dotaz pro filtr AnyIn v MongoDB

nedělej to :)

Jedním z míst, kde můžete začít, je zde . Popisuje všechny operátory LINQ, které podporuje ovladač MongoDB .NET. Jak můžete vidět .Contains() není tam uvedeno, což znamená, že to nemůžete použít a za běhu se objeví chyba, ale to neznamená, že neexistuje způsob, jak udělat to, čeho se snažíte dosáhnout.

Nejbližší operátor obsahuje, který můžete použít, je $indexOfBytes což vrátí -1 pokud neexistuje žádná shoda a pozice podřetězce jinak. Také protože potřebujete porovnat pole s jiným polem, potřebujete dva páry $map a $anyElementTrue dělat přesně to, co .NET je .Any dělá.

Váš dotaz (klient MongoDB) může vypadat takto:

db.collection.find({
    $expr: {
        $anyElementTrue: {
            $map: {
                input: "$groupsAuthorized",
                as: "group",
                in: {
                    $anyElementTrue: {
                        $map: { 
                            input: ["France/IDF/Paris", "USA/NY/NYC"],
                            as: "userGroup",
                            in: { $ne: [ -1, { $indexOfBytes: [ "$$userGroup", "$$group" ] } ] }
                        }
                    }
                }
            }
        }
    }
})

Hřiště Mongo ,

Stejný dotaz můžete spustit z .NET pomocí BsonDocument třída, která vezme řetězec (JSON) a převede na dotaz:

var query = BsonDocument.Parse(@"{
    $expr: {
        $anyElementTrue:
        {
            $map:
            {
                input: '$groupsAuthorized',
                    as: 'group',
                    in: {
                    $anyElementTrue:
                    {
                        $map:
                        {
                            input: ['France/IDF/Paris', 'USA/NY/NYC'],
                                as: 'userGroup',
                                in: { $ne: [-1, { $indexOfBytes: ['$$userGroup', '$$group'] } ] }
                        }
                    }
                }
            }
        }
    }
}");

var result = col.Find(query).ToList();



  1. MongoDB počítá skóre z existujících polí a vkládá je do nového pole ve stejné kolekci

  2. Python + Memcached:Efektivní ukládání do mezipaměti v distribuovaných aplikacích

  3. Uložení dokumentu mongoDB s omezeným polem pomocí Java springdata ($slice a $sort)

  4. Nodejs / Express – Spouštění mé aplikace:express.createServer() je zastaralé