Как найти элемент в документе вложенного дочернего массива в MongoDB с помощью c # - PullRequest
0 голосов
/ 03 января 2019

У меня есть документ ниже, я пытаюсь найти элемент, который находится во вложенном документе "ids",

Если элемент найден, возвращаемое значение bool или count.Я пытался с запросом Mongodb, но не уверен, как написать запрос для элементов массива.ошибка: - Operator == cannot be applied to operands of type 'string[]' and 'string'

foreach (var req in _addUpdateRailsObjectInfoRequest.ids)
{
      string value=req.id

  var isIdExists = Builders<RailsData>.Filter.And(
  Builders<RailsData>.Filter.ElemMatch(c => c.content.queryInclude, c => c.type == req.type),
  Builders<RailsData>.Filter.ElemMatch(c => c.content.queryInclude, c => c.ids == value));
 }

// Ошибка в последней строке возле значения c.id ==.Оператор == нельзя применить к операндам типа 'string []' и 'string'

 {
        "_id" : ObjectId("5c2d3e700aff6771ebfc88ea"),
        "name" : "Toyota",
            "content" : {
            "queryInclude" : [ 
                {
                    "type" : "departments",
                    "ids" : [ 
                        "21", 
                        "18", 
                        "19", 
                        "29", 
                        "30"
                    ]
                }
            ]
        }
    }

//

public class RailsData
{
    public string name { get; set; }
    public content content { get; set; }
}

 public class content
 {
   public List<queryInclude> queryInclude { get; set; }
 }

    public class queryInclude
    {
        public string type { get; set; } 
        public string[] ids { get; set; }
    }

1 Ответ

0 голосов
/ 03 января 2019

Сообщение об исключении самоочевидно: вы не можете использовать оператор сравнения равенства (==) между строкой и string[] массивом, потому что они имеют разные типы.Согласно ElemMatch документации , вы можете использовать Any() метод расширения:

Builders<RailsData>.Filter.ElemMatch(c => c.content.queryInclude, c => c.ids.Any(x => x == value));

или использовать Contains() в качестве альтернативы:

Builders<RailsData>.Filter.ElemMatch(c => c.content.queryInclude, c => c.ids.Contains(value));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...