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用例。