sql >> Databasteknik >  >> NoSQL >> MongoDB

C# MongoDB-drivrutin:Kan inte hitta sättet att köra komplexa frågor för AnyIn-filter i MongoDB

gör det inte :)

Ett ställe du kan börja med är här . Den beskriver alla LINQ-operatörer som stöds av MongoDB .NET-drivrutinen. Som du kan se .Contains() nämns inte där vilket betyder att du inte kan använda det och du kommer att få en felmeddelande under körningen, men det betyder inte att det inte finns något sätt att göra det du försöker uppnå.

Operatören närmast innehåller du kan använda är $indexOfBytes som returnerar -1 om det inte finns någon matchning och positionen för en delsträng annars. Eftersom du behöver matcha en array mot en annan array behöver du också två par $map och $anyElementTrue att göra exakt vad .NET är .Any gör.

Din fråga (MongoDB-klient) kan se ut så här:

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öra samma fråga från .NET med BsonDocument klass som tar en sträng (JSON) och konverterar till en fråga:

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 sökprestanda

  2. Upsert inbäddat dokument i yiimongodbsuite

  3. Varför MongoDb-sortering är långsam med uppslagssamlingar

  4. MongoDB - Ta bort ett dokument