MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Sterownik C# MongoDB:nie można znaleźć sposobu na uruchomienie złożonego zapytania dla filtra AnyIn w MongoDB

nie rób tego :)

Jednym z miejsc, od którego możesz zacząć, jest tutaj . Opisuje wszystkie operatory LINQ, które są obsługiwane przez sterownik MongoDB .NET. Jak widać .Contains() nie jest tam wymienione, co oznacza, że ​​nie możesz go użyć i otrzymasz błąd w czasie wykonywania, ale nie oznacza to, że nie ma możliwości zrobienia tego, co chcesz osiągnąć.

Operator najbliższy zawartości, której możesz użyć, to $indexOfBytes co zwraca -1 jeśli nie ma dopasowania, a pozycja podciągu inaczej. Ponieważ musisz dopasować tablicę do innej tablicy, potrzebujesz dwóch par $mapa i $anyElementTrue zrobić dokładnie to, co .Any .NET czy.

Twoje zapytanie (klient MongoDB) może wyglądać tak:

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

Plac zabaw Mongo ,

Możesz uruchomić to samo zapytanie z .NET za pomocą BsonDocument klasa, która pobiera ciąg (JSON) i konwertuje na zapytanie:

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. XML do BSON za pomocą C#

  2. Powłoka Mongo wyświetla błąd Wiele wystąpień opcji

  3. Pomnóż pole przez wartość w Mongodb

  4. Jak dokładnie spring-data-mongodb obsługuje konstruktory podczas ponownego nawadniania obiektów?

  5. Usuń duplikaty z bazy danych MongoDB 4.2