arrays - 将 Mongo DB 数组元素与自身进行比较,以在文档中查找特定字段中具有不同值的数组
问题描述
我有一个 mongo 集合 QT_STG 如下:
Document #1
{
"_id" : ObjectId("603f82844cc37e190862e0e6"),
"saleid" : "M5111161000",
"parentID" : "1",
"distid" : "123",
"gracePeriod" : "12"
"lineDetails" : [
{
"id" : "1",
"endDate" : "3/26/2022"
},
{
"id" : "2",
"endDate" : "3/26/2022"
},
]
}
Document #2
{
"_id" : ObjectId("603f82844cc37e190862e0e6"),
"saleid" : "M5111161000",
"parentID" : "1",
"distid" : "123",
"gracePeriod" : "12"
"lineDetails" : [
{
"id" : "1",
"endDate" : "3/24/2022"
},
{
"id" : "2",
"endDate" : "3/22/2022"
},
{
"id" : "3",
"endDate" : "4/22/2022"
}
]
}
我应该能够选择 linedetails 大小大于“2”并且在“lineDetails”数组中具有不同“endDate”的文档。
在上面的示例中,只有 Document#2 必须被选中。有人可以在这里帮助我。
解决方案
为@Mohammad Naimi 解决方案添加了更多条件并得到了结果。
db.quoting_staging.aggregate(
[
{
"$addFields": {
"numLineDetails": {
"$size": { "$ifNull": [ "$lineDetails", [] ] }
}
}
}
, {
'$match': {
'numLineDetails': {
'$gt': 2
}
}
},
{
'$unwind': {
'path': '$lineDetails'
}
},
{
'$group': {
'_id': {
'id': '$_id'
},
'sid': { "$first": "$$ROOT.sid" },
'arr': {
'$addToSet': '$$ROOT.lineDetails.endDate'
},
'initialArrSize':{ "$first": "$$ROOT.numLineDetails" }
}
},
{
"$addFields": {
"distinctArrSize": {
"$size": { "$ifNull": [ "$arr", [] ] }
}
}
},
{
'$project': {
'arr': 1,
'_id': 1,
'sid': 1,
'distinctArrSize':1,
'initialArrSize':1
}
}
, {
'$match': {$expr: {$eq: ["$distinctArrSize", "$initialArrSize"]}}
}
])
比较初始的 'linedetails' 大小 'arr' 大小帮助我识别出在其 linedetails 中具有唯一结束日期的文档。
推荐阅读
- swift - Swift 3.0 将字符串转换为日期
- javascript - 将 printthis 按钮动态添加到某个类
- c# - TimeSpan.ToString() 上的 System.FormatException
- c++ - 从 qml 获取用户输入到 c++
- sas - 连接具有非零值的列名
- matlab - 从 txt 文件 MATLAB 中加载混合数据时遇到问题
- vba - Excel VBA:如何在填充 PDF 之前更改 ComboBox 中的值(查看详细信息)
- ruby-on-rails - 带有 Ransack 的 will_paginate 导致参数错误
- xamarin - 如何从外部更新 vuex 中的商店?
- sql - 派生表错误:“无法绑定多部分标识符”