fat*_*han 2 mongodb mongodb-query mongodb-csharp-2.0 mongodb-.net-driver
我需要从“followingList.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"
}
Run Code Online (Sandbox Code Playgroud)
我尝试获得如下结果代码块,但无法弄清楚。
var filter = Builders<Post>.Filter.AnyEq("username", usernameList);
var result = collection.Find(filter).ToListAsync().Result;
Run Code Online (Sandbox Code Playgroud)
你能帮我解决这个问题吗?谢谢。
逻辑被翻转,如果我正确理解您的用例,您需要的是$in查询:
var filter = Builders<Post>.Filter.In("username", usernameList);
var result = collection.Find(filter).ToListAsync().Result;
Run Code Online (Sandbox Code Playgroud)
在您的情况下,username是一个简单的字段,您希望与候选人列表进行匹配。AnyEq用于检查从复杂对象的嵌入列表中,至少有一个匹配标准。这仍然转化为 MongoDB 中的简单查询,但需要“进入”需要更复杂语法的对象。