Запрос Mongodb для сопоставления на основе 2 полей - PullRequest
0 голосов
/ 17 декабря 2018

Позвольте мне привести пример:

{
 $match: {
 $or:[
  {'sender':1, 'recipient':2},
  {'sender':2, 'recipient':1},
  {'sender':1, 'recipient':3},
  {'sender':7, 'recipient':2},
  {'sender':7, 'recipient':3} //goes on may be 20 or 30 
 ]
}
}

Я пытаюсь получить данные на основе отправителя и получателя.Если отправитель и получатель попадают в эту комбинацию категорий, я выбираю только эти данные.

Из приведенного выше примера я могу сказать, что комбинация sender:7 и recipient:1 недопустима, допустима только комбинация sender:7 и recipient:2 или recipient:3.

Есть ли способ упростить вышеупомянутый запрос в C#?

1 Ответ

0 голосов
/ 17 декабря 2018

Если вы хотите писать запросы на c #, я бы предложил использовать для этого репозиторий, это значительно упростит вам задачу, и вы сможете написать некоторые запросы в стиле структуры сущностей

https://github.com/alexandre-spieser/mongodb-generic-repository

  public class TestMongoRepository: BaseMongoRepository, IEmailMongoRepository
    {
        public TestMongoRepository(string connectionString, string databaseName) : base(connectionString, databaseName)
        {

        }
        //public MongoRepository<T> Create<T>() where T:IEntity
        //{
        //    return new MongoRepository<T>();
        //}
    }
}
  public class Data: Document
    {

        public string Sender { get; set; }
       public string Receiver{ get; set; }

}

тогда вы можете запросить, используя следующий синтаксис

var _yourRepository=new TestMongoRepository("connectionstring","database");



    class Combination{
    public int Sender{get;set;}
    public int Receiver {get;set;}
    }
var combinations=new List<Combination>{
new Combination{Sender=1, Receiver=5},
// add your other comibnaitons here

}

var data= _yourRepository.GetAll<Data>(e =>combinations.Any(c=>c.Sender=e.Sender && c.Receiver=e.Receiver) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...