Как найти из коллекции mon go, используя разделенную запятыми строку в C# - PullRequest
0 голосов
/ 05 марта 2020

Я хочу получить данные с понедельника go, используя строку через запятую в C#. Ниже мой код.

 string numbers = "32,12,56,78";
 List<CustomerNumbers> calling_number= new List<CDRs>();

 IMongoCollection<CustomerNumbers> Collec;

 calling_number= Collec.Find(x => x.customer == ID && x.numbers.Contains(numbers)).ToList();

Я новичок в понедельник go и не знаю точного подхода. при использовании вышеуказанного кода я получаю записи для одного номера. Пожалуйста, помогите мне исправить это. TIA

Классовая структура

public class CustomerNumbers
{
    public string numbers { get; set; }
    public int customer { get; set; }
}

1 Ответ

0 голосов
/ 05 марта 2020

В идеале вы должны смоделировать поле numbers в пн go как массив, а не как строку с разделителями, это позволит вам добавлять индексы и настраивать производительность ваших запросов.

Однако, для этого мы можем использовать конвейер агрегации. Нам понадобится дополнительный класс, подобный следующему, который мы будем использовать:

    public class CustomerNumbersSplit
    {
        public string[] numbers { get; set; }
        public int customer { get; set; }
    }

Нам также понадобится разбить строку, разделенную запятыми.

var numbers = "32,12,56,78";

var numbersSplit = numbers.Split(",", StringSplitOptions.RemoveEmptyEntries)
    .Select(int.Parse)
    .ToArray();

Один раз мы сделали, что можем написать запрос следующим образом:

var result = await collection.Aggregate()
    .Match(x => x.customer == ID)
    .AppendStage<CustomerNumbersSplit>(@"{ $addFields: { numbers: { $split: [""$numbers"", "","" ] } } }")
    .Match(x => x.numbers.Any(y => numbersSplit.Contains(y)))
    .ToListAsync();

Это использует $ split и $ addFields, поэтому мы можем использовать механизм базы данных для разделения числа и запроса их в ядре базы данных.

Если вас интересует сгенерированный запрос:

[
  { "$match" : { "customer" : 12324 } },
  { "$addFields" : { "numbers" : { "$split" : ["$numbers", ","] } } },
  { "$match" : { "numbers" : { "$elemMatch" : { "$in" : ["32", "12", "56", "78"] } } } }
]
...