sql >> Database teknologi >  >> NoSQL >> MongoDB

C# MongoDB Driver:Kan ikke finde måden at køre kompleks forespørgsel for AnyIn filter i MongoDB

gør det ikke :)

Et sted du kan starte med er her . Den beskriver alle de LINQ-operatører, der understøttes af MongoDB .NET-driveren. Som du kan se .Contains() er ikke nævnt der, hvilket betyder, at du ikke kan bruge det, og du vil få en fejl under kørsel, men det betyder ikke, at der ikke er nogen måde at gøre det, du forsøger at opnå.

Operatøren tættest på indeholder, du kan bruge, er $indexOfBytes som returnerer -1 hvis der ikke er noget match og positionen af ​​en understreng ellers. Da du også skal matche et array mod et andet array, har du brug for to par $map og $anyElementTrue at gøre præcis, hvad .NET's .Any gør.

Din forespørgsel (MongoDB-klient) kan se sådan ud:

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" ] } ] }
                        }
                    }
                }
            }
        }
    }
})

Mongo Playground ,

Du kan køre den samme forespørgsel fra .NET ved hjælp af BsonDocument klasse, som tager en streng (JSON) og konverterer til en forespørgsel:

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. Redis med Resque og Rails:ERR-kommando er ikke tilladt, når der bruges hukommelse> 'maxmemory'

  2. Forskellen mellem Find og FindAsync

  3. Sådan bruger du mongoimport til at importere csv

  4. Mongoose:hvad er forskellene mellem Model.create og Collection.insert