c# - 当列表中某个项目的字段值与另一个项目的不同字段值匹配时查询 MondoDB 集合
问题描述
我有一个集合,mongoDB
其中记录类似于以下内容(示例数据),其中最新版本与增量值一起存储在名为“版本”的字段中,并为历史数据的项目复制一个_id
作为resourceId的副本。此处记录 1、2、3 是同一记录,但版本和状态不同。所以我需要找到一个项目id
与其他记录匹配recourseId
并且状态为“已发布”的所有记录以及其他记录。在这种情况下,我的输出应该只有记录 4,因为虽然记录 3 的版本最高,但状态没有发布。在这种情况下,我没有显示任何记录 1 或 2 或 3。MongoDB
使用c#.net
or时如何实现这一点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
。首先,我尝试按如下方式创建pipeline
in ,然后将其翻译成.MongoDB Compass
VB.Net
查询首先检查是否存在三个属性字段值。然后它按版本降序对文档进行排序。然后它按与resourceId匹配的_id对文档进行分组。然后该组被赋予不同的名称latestversion。然后它按状态匹配新分组的文档。这是预期的结果。
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'
}}]
推荐阅读
- android - Android:禁用向下滑动并查看 wifi/飞行模式
- javascript - 来自 Video 元素的 drawImage 行为不正常,并且分辨率混乱
- python - 如何完全卸载 Anaconda 及其软件包?
- java - JavaFX在按钮单击时设置表格视图的表格行工厂
- python - Python - 我新创建的类实例丢失了
- javascript - 可迭代的 Promises,对每个 Promise 进行评估
- operating-system - IBM大型机如何读取PSW(程序状态字)中的数据
- javascript - 链接异步函数无法正常工作
- django - Django,下载文件后默认文件图标丢失
- r - 加速行星生成并避免 R 中的 for 循环