MongoDB .NET驱动程序-在匹配阶段使用$in

3zwjbxry  于 2023-03-07  发布在  Go
关注(0)|答案(2)|浏览(143)

我有两个集合,一个是帖子(PostInfo),一个是用户(UserInfo),我加入了两个集合,如果给定的useridAsUser. 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#格式。

igsr9ssn

igsr9ssn1#

$in运算符(逻辑)不正确,请检查AsUser.Friends数组中的userId是否为:

{
  $match: {
    $expr: {
      $in: [
        "9e3163b9-1ae6-4652-9dc6-7898ab7b7a00",  // UserId
        "$AsUser.Friends"
      ]
    }
  }
}

Sample Mongo Playground
对于MongoDB C#语法,

.Match(
    new BsonDocument() 
    {
        { 
            "$expr", new BsonDocument() 
            {
                { "$in", new BsonArray() { user.UserId, "$AsUser.Friends" } }                                 
            }
        }
    }
)
jtoj6r0c

jtoj6r0c2#

$expr仅在执行更复杂的表达式查询、执行转换和应用函数时才需要a-例如,计算和数组的平均值并对其执行匹配。
您只需要在Match和MongoDB shell中使用简单的查找语法:find({"asuser.friends":user.UserId})
或者在您的情况下:
Match( new BsonDocument( "AsUser.Friends",user.UserId))
在MongoDB中,对数组的匹配将匹配任何元素或整个数组。

相关问题