如何在C#中的List <t>上应用mongodb查询?

时间:2016-09-06 14:48:42

标签: c# mongodb mongodb-.net-driver

我正在使用MongoDB在c#中开发简单的Web服务。我被卡在一个地方,在我的mongoDocument中,我有以下userIds列表(仅举例),

"_id" : ObjectId("57ce7aa1c54ec61774f0a91d"),
"MobileNumber" : "9652365485",
"Password" : "aaaaaa",
"Countrycode" : "+91",
"Email" : "test@xyz.com",
"CurrentDate" : ISODate("2016-09-06T08:13:22.859Z"),
"ModifiedDate" : ISODate("2016-09-06T08:13:23.211Z"),
"Location" : {
        "type" : "Point",
        "coordinates" : [
                23.464464,
                -73.326464
        ]
},
"FriendList" : [
        "57ce7aa1c54ec61774f0a91d",
        "57ce7aa1c54ec61774f0a91d"
],

现在我从朋友列表中获取所有UserIds并创建一个像这样的用户列表

     List<Users> friendList = new List<Users>(); 
     friendList = FriendListById(UserId); //This method will return all my friends which is in "FriendList" array in document.

public List<Users> FriendListById(string userId)
        {
            MongoCollection userCollection = db.MongoDatabase.GetCollection("UserMaster");
            List<Users> userList = new List<Users>();
            string[] friendIdList;


                    var loginUser = userCollection.FindAs<Users>(Query.EQ("_id", ObjectId.Parse(userId)));
                    if (loginUser != null)
                    {
                        friendIdList = loginUser.FirstOrDefault().FriendList;

                        for (int i = 0; i < friendIdList.Length; i++)
                        {
                            Users user = userCollection.FindOneAs<Users>(Query.EQ("_id", ObjectId.Parse(friendIdList[i])));
                            userList.Add(user);
                        }

                        return userList;
                    }
                    else
                    {
                        return userList;
                    }
                }
        }

上面的方法返回我朋友列表中的用户的完整详细信息(在这个朋友列表中我只按照上面给出的集合示例存储Id。)并且我在此方法中传递登录用户ID,因此它将返回我的朋友列表用户。

Noe我有这个列表中所有朋友的详细信息(这个朋友(用户)也在同一个集合中。)

现在,我希望使用mongo查询从此FriendList中找到特定用户(例如使用附近朋友进行搜索,使用特定名称查询等)。请给我解决方案。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果您已经获取了该项目,则单个Linq就可以了:

List<Users> friendList = new List<Users>(); 
friendList = friendList.FirstOrDefault(x=>x.Id=="yourId");

如果你想找一个mongodb查询来搜索某人是否是某人的朋友,你必须在某个用户的FriendList中查找用户ID:

var filter = Builders<Users>.Filter.ElemMatch(x => x.FriendList, x => x == "your_id");
var res = await collection.Find(filter).ToListAsync();

然后您浏览列表res并在您的用户集合中搜索这些用户。

但是如果你想在Mongoose中使用像populate()这样的东西,我认为.net驱动程序中还没有任何官方实现。