2016-09-23 2 views
1

Я хочу использовать .net драйвер mongo, чтобы написать запрос, который будет проверять, является свойство элементов субколлекции равно свойству его владельца. Для наглядности я приведу примерmongo .net драйвер генерирует неправильный запрос

позволяет сказать, что мы имеем @персонала сбора с @детьми и мы хотим найти персонал, которые имеют то же имя, что его ребенок

var query = db.GetCollection("personnels") 
       .AsQueryable() 
       .Select(person => person.Children.Any(child => child.FirstName == person.FirstName)); 

этот запрос будет переведен в

db.getCollection('personnels').aggregate([ 
    { 
     "$project": { 
      "__fld0": { 
       "$anyElementTrue": { 
        "$map": { 
         "input": "$Children", 
         "as": "child", 
         "in": { 
          "$eq": [ 
           "$$child.FirstName", 
           "$$child.FirstName" 
          ] 
         } 
        } 
       } 
      }, 
      "_id": 0 
     } 
    } 
]) 

но там что-то пошло не так

вместо этого "$eq": [ "$$child.FirstName","$$child.FirstName" ],

запрос должен быть переведен на

"$eq": [ "$FirstName","$$child.FirstName" ] 

Скажи мне, что я делаю неправильно?

ответ

0

Я бы предложил использовать тип FilterDefinitionBuilder для запроса информации. Хотя LINQ полезен, я обнаружил, что более сложные запросы становятся беспорядочными с использованием LINQ. Перейдите по этой ссылке для получения дополнительной документации. http://mongodb.github.io/mongo-csharp-driver/2.2/reference/driver/definitions/

Ниже будет приведен примером того, как создать фильтр ...

var builder = Builders<BsonDocument>.Filter; 
var filter = builder.Eq("x", 10) & builder.Lt("y", 20); 

Надеется, что это помогает!

+0

Вспомните, вам понадобится библиотека MongoDriver ... вы можете добавить пакет в свой проект из следующей команды в Shell диспетчера пакетов. Install-Package MongoDB.Driver –

Смежные вопросы