MongoDB .Net драйвер 2.0 Фильтр строителей (сравнение полей с массивами)

Мне нужно получить все имена пользователей из "followList.username" и сравнить с именами пользователей сообщений, если есть какое-либо совпадение, необходимо добавить это имя в массив.

Person Model
{
    "_id" : ObjectId("554f20f5c90d3c7ed42303e1"),
    "username" : "fatihyildizhan",
    "followingList" : [ 
        {
            "_id" : ObjectId("55505b6ca515860cbcf7901d"),
            "username" : "gumusluk",
            "avatar" : "avatar.png"
        },
        {
            "_id" : ObjectId("58505b6ca515860cbcf7901d"),
            "username" : "yalikavak",
            "avatar" : "avatar.png"
        },
        {
            "_id" : ObjectId("58305b6ca515860cbcf7901d"),
            "username" : "gumbet",
            "avatar" : "avatar.png"
        }
    ]
}

Post Model
{
    "_id" : ObjectId("554f2df2a388R4b425b89833"),
    "username" : "yalikavak",
    "category" : "Summer",
    "text" : "blue voyage with yacht"
},
{
    "_id" : ObjectId("554f2df2a388P4b425b89833"),
    "username" : "yalikavak",
    "category" : "Winter",
    "text" : "is coming ..."
},
{
    "_id" : ObjectId("554f2df2a388K4b425b89833"),
    "username" : "gumbet",
    "category" : "Fall",
    "text" : "there are many trees"
}

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

var filter = Builders<Post>.Filter.AnyEq("username", usernameList);
var result = collection.Find(filter).ToListAsync().Result;

ты можешь помочь мне с этим? Благодарю.

1 ответ

Решение

Логика перевернута, что вам нужно, это $in запросить, правильно ли я понимаю ваш вариант использования:

var filter = Builders<Post>.Filter.In("username", usernameList);
var result = collection.Find(filter).ToListAsync().Result;

В твоем случае, username это простое поле, и вы хотите сопоставить со списком кандидатов. AnyEq используется для проверки того, что из встроенного списка сложных объектов хотя бы один соответствует критерию. Это все еще переводит на простой запрос в MongoDB, но требует "добраться до" объекта, который нуждается в более сложном синтаксисе.

Другие вопросы по тегам