C# 当列表中某项的字段值与另一项匹配时查询MondoDB集合';不同的字段值

C# 当列表中某项的字段值与另一项匹配时查询MondoDB集合';不同的字段值,c#,mongodb,vb.net,mongodb-query,mongodb-.net-driver,C#,Mongodb,Vb.net,Mongodb Query,Mongodb .net Driver,我在mongoDB中有一个集合,其中的记录如下(示例数据),其中最新版本以增量值存储在名为“版本”的字段中,而\u id的副本作为resourceId用于历史数据项。这里的记录1、2、3是具有不同版本和状态的相同记录。因此,我需要找到所有记录,其中一个项目的id与其他记录resourceid匹配,并且状态与其他记录一起为“Published”。在这种情况下,我的输出应该仅为记录4,因为尽管记录3具有最高版本,但状态未发布。在本例中,我不显示任何记录1、2或3。如何在MongoDB中使用c#.ne

我在
mongoDB
中有一个集合,其中的记录如下(示例数据),其中最新版本以增量值存储在名为“版本”的字段中,而
\u id的副本作为resourceId用于历史数据项。这里的记录1、2、3是具有不同版本和状态的相同记录。因此,我需要找到所有记录,其中一个项目的
id
与其他记录
resourceid
匹配,并且状态与其他记录一起为“Published”。在这种情况下,我的输出应该仅为记录4,因为尽管记录3具有最高版本,但状态未发布。在本例中,我不显示任何记录1、2或3。如何在
MongoDB
中使用
c#.net
vb.net
实现这一点

1.  id:"11A"
    name: "Blue Block"
    status: "Published"
    version: "0"
    resourceId: ""
2.  id:"11B"
    name: "Blue Block"
    status: "Published"
    version: "1"
    resourceId: "11A"
3.  id:"11C"
    name: "Blue Block"
    status: "Draft"
    version: "2"
    resourceId: "11A"
4.  id:"11D"
    name: "Red Block"
    status: "Published"
    version: "0"
    resourceId: ""
我尝试的是:

Public Class Toy
    Public Property ID As String
    Public Property Name As String
    Public Property Status As String
    Public Property Version As String
    Public Property ResourceID As String
End class

Private Function GetToys() As List(Of Toy)
 
  Dim listOfToys = db.GetCollection(Of BsonDocument)("Toys").Aggregate().Match(Function(x) x.GetElement("id") = x.GetElement("resourceId")).SortByDescending(Function(x) x.GetElement("version")).Group(BsonDocument.Parse("{ 'id':'$group',  'latestvalue':{$first:'$value'} }")).ToList()

  Return listOfToys
End Function

这没用。不确定如何在此处添加“状态”复选框。

查询需要的不仅仅是标准的
$lookup
。首先,我尝试在
MongoDB Compass
中创建
管道,如下所示,然后将其翻译成
VB.Net

查询首先检查是否存在三个属性字段值。然后,它按版本对文档进行降序排序。然后,它根据\u id对文档进行分组,并将其与资源id匹配。然后该组被赋予不同的名称最新版本。然后,它通过状态匹配新分组的文档。这是预期的结果

MongoDBCompass聚合管道:

[{$match: {
$and: [
{
  status: {
    $exists: true
  }
},
{
  version: {
    $exists: true
  }
},
{
  resourceId: {
    $exists: true
  }
}
]
}}, {$sort: {
      version: -1
}}, {$group: {
      _id: '$resourceId',
      latestVersion: {
            $first: '$$ROOT'
    }
 }}, {$match: {
     'latestVersion.status': {
     $eq: 'Published'
}
}}, {$replaceRoot: {
     newRoot: '$latestVersion'
}}]

这是标准的$lookup用例。