sql >> Database >  >> NoSQL >> MongoDB

C# MongoDB-stuurprogramma:kan geen manier vinden om complexe query's voor AnyIn-filter in MongoDB uit te voeren

doe het niet :)

Een plaats waarmee u kunt beginnen is hier . Het beschrijft alle LINQ-operators die worden ondersteund door het MongoDB .NET-stuurprogramma. Zoals je kunt zien .Contains() wordt daar niet vermeld, wat betekent dat je het niet kunt gebruiken en dat je een arror krijgt in de runtime, maar het betekent niet dat er geen manier is om te doen wat je probeert te bereiken.

De operator die het dichtst bij bevat die u kunt gebruiken, is $indexOfBytes wat -1 returns retourneert als er geen overeenkomst is en anders de positie van een subtekenreeks. Omdat je een array moet vergelijken met een andere array, heb je twee paar $map en $anyElementTrue om precies te doen wat .NET's .Any . is doet.

Uw zoekopdracht (MongoDB-client) kan er als volgt uitzien:

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 Speeltuin ,

U kunt dezelfde query uitvoeren vanuit .NET met behulp van BsonDocument class die een string (JSON) neemt en omzet in een query:

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. Connection String in MongoDB (met voorbeelden)

  2. Meerdere DB's gebruiken met één Redis Lua-script?

  3. MongoDB - Een verzameling maken

  4. Tussen datums zoeken in MongoDB