В Mongodb, как я могу искать документы, используя два "выровненных" массива параметров поиска? - PullRequest
0 голосов
/ 27 августа 2018

Предположим, у вас есть монго-документ с составным ключом, состоящим из двух полей: doc_id и sec_id

В моей бизнес-логике они объединяются для создания "id", где:

id = doc_id-sec_id.

Мой запрос содержит эти два массива:

doc_ids = [1,2,3] sec_ids = [111,222,333]

Они соответствуют документам с идентификаторами: 1-111,2-222, 3-333.

Я хочу передать эти два массива поисковому запросу в монго, чтобы поиск возвращал документ только в случае совпадения с id = "doc_ids [i] -sec_ids [i]".

например, я хочу три документа, перечисленных выше. Я не хочу документ с идентификатором 1-222 или 3-111 и т. Д.

Вот мое использование конструктора фильтров C # Mongo для выполнения этого запроса. Будет ли это мудрый запрос для достижения моей цели? (В частности, использование "В")

GetDocumentIdsFilter(IEnumerable<string> doc_ids, IEnumerable<string> sec_ids )
{
                   var filterBuilder = Builders<ViewedContent>.Filter;
                   return filterBuilder.And(
                        filterBuilder.In(x => x.doc_id, doc_ids),
                        filterBuilder.In(x => x.sec_id, sec_ids));
}

1 Ответ

0 голосов
/ 28 августа 2018

Вот версия C #, которая должна работать:

private static FilterDefinition<ViewedContent> GetDocumentIdsFilter(IEnumerable<string> doc_ids, IEnumerable<string> sec_ids)
{
    var filterBuilder = Builders<ViewedContent>.Filter;
    var query = filterBuilder.Or(doc_ids.Zip(sec_ids, (docId, secId) => filterBuilder.And(
        filterBuilder.Eq(x => x.doc_id, docId),
        filterBuilder.Eq(x => x.sec_id, secId))));

    // add another independent filter as per your comment above
    query = filterBuilder.And(query, filterBuilder.Eq(x => x.user_id, "some id"));
    return query;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...