我有两个集合,一个是帖子(PostInfo),一个是用户(UserInfo),我加入了两个集合,如果给定的userid在AsUser. Friends中,我想找到帖子:
var docs = await _dbContext.PostInfos.Aggregate()
.Lookup("UserInfo", "UserId", "UserId", "AsUser")
.Unwind("AsUser")
.Match(
new BsonDocument() {
{ "$expr", new BsonDocument() {
{ "$in", new BsonArray(){ "$AsUser.Friends", BsonArray.Create(user.UserId) } }
}
}
}
)
.As<PostInfo>()
.Project<PostInfo>(Builders<PostInfo>.Projection.Exclude("AsUser"))
.ToListAsync();
这是用户信息文档:
{
"_id" : ObjectId("62d64398772c29b212332ec2"),
"UserId" : "18F1FDB9-E5DE-4116-9486-271FE6738785",
"IsDeleted" : false,
"UserName" : "kaveh",
"Followers" : [],
"Followings" : [],
"Friends" : [
"9e3163b9-1ae6-4652-9dc6-7898ab7b7a00",
"2B5F6867-E804-48AF-BED3-672EBD770D10"
],
}
我在使用$in
运算符时遇到问题。
- 更新**
此外,我认为这也会起作用(从here):
db.inventory.find( { tags: { $eq: [ "A", "B" ] } } )
但是我无法将其转换为C#格式。
2条答案
按热度按时间igsr9ssn1#
$in
运算符(逻辑)不正确,请检查AsUser.Friends
数组中的userId
是否为:Sample Mongo Playground
对于MongoDB C#语法,
jtoj6r0c2#
$expr仅在执行更复杂的表达式查询、执行转换和应用函数时才需要a-例如,计算和数组的平均值并对其执行匹配。
您只需要在Match和MongoDB shell中使用简单的查找语法:
find({"asuser.friends":user.UserId})
或者在您的情况下:
Match( new BsonDocument( "AsUser.Friends",user.UserId))
在MongoDB中,对数组的匹配将匹配任何元素或整个数组。