我正在使用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中找到特定用户(例如使用附近朋友进行搜索,使用特定名称查询等)。请给我解决方案。
提前谢谢。
答案 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驱动程序中还没有任何官方实现。