MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

C# MongoDB драйвер:Не може да се намери начин за изпълнение на сложна заявка за филтър AnyIn в MongoDB

не го прави :)

Едно място, от което можете да започнете, е тук . Той описва всички LINQ оператори, които се поддържат от MongoDB .NET драйвера. Както можете да видите .Contains() не се споменава там, което означава, че не можете да го използвате и ще получите грешка по време на изпълнение, но това не означава, че няма начин да направите това, което се опитвате да постигнете.

Операторът, който е най-близо до съдържа, който можете да използвате, е $indexOfBytes което връща -1 ако няма съвпадение и позицията на подниз в противен случай. Освен това, тъй като трябва да съпоставите масив с друг масив, имате нужда от два чифта $map и $anyElementTrue да правите точно това, което .Any на .NET прави.

Вашата заявка (MongoDB клиент) може да изглежда така:

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 ,

Можете да стартирате същата заявка от .NET, като използвате BsonDocument клас, който приема низ (JSON) и преобразува в заявка:

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
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Попълнете полето за избор от колекция и филтрирайте според избраната стойност в meteor

  2. MongoDB _id (ObjectId) генерира ли се във възходящ ред?

  3. MongoDB група по продължителност

  4. Mongoexport -q ISODate заявка

  5. Вмъкнете MongoDB документ с React.js