我正在嘗試將集合加入到自身中,因此在一個查詢中我可以接收檔案和緊接在它之前的檔案。我正在嘗試使用aggregate和 `$lookup' 來做到這一點。
以下是一些示例資料:
[
{
"_id": {
"$oid": "61e40955cb65f4a8edec3461"
},
"ImageName": "2022-01-16-120228.png",
"Start": {
"$date": "2022-01-16T12:02:29.437Z"
}
},
{
"_id": {
"$oid": "61e40957cb65f4a8edec3463"
},
"ImageName": "2022-01-16-120230.png",
"Start": {
"$date": "2022-01-16T12:02:31.443Z"
}
},
{
"_id": {
"$oid": "61e4095acb65f4a8edec3469"
},
"ImageName": "2022-01-16-120233.png",
"Start": {
"$date": "2022-01-16T12:02:33.189Z"
}
},
{
"_id": {
"$oid": "61e4095ccb65f4a8edec346b"
},
"ImageName": "2022-01-16-120235.png",
"Start": {
"$date": "2022-01-16T12:02:35.288Z"
}
}]
對于此集合中的每個檔案,我想在按日期排序時將其前面的檔案帶回Start,如下所示:
db.Captures.aggregate([{
$lookup: {
from: 'Captures',
as: 'precedingCaptures',
let: {
'start': '$Start'
},
pipeline: [
{
$sort: {
'Start': -1
}
},
{ $match: {
'Start': {$lt: '$$start'}
}},
{ '$limit': 1 }
]
}
}])
但是在我生成的檔案precedingCaptures中是空的。我究竟做錯了什么?
uj5u.com熱心網友回復:
您不能使用$matchwith的“簡單”形式pipeline $lookup。您必須使用$expr此處所述的表格:https ://docs.mongodb.com/manual/reference/operator/aggregation/lookup/
這將起作用:
db.foo.aggregate([
{$lookup: {
from: 'foo',
as: 'precedingCaptures',
let: { 'start': '$Start'},
pipeline: [
{ $match: {$expr: {$lt:['$Start','$$start']} }}, // $expr form
{ $sort: {'Start': -1}},
{ $limit: 1 }
]
}}
]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/437017.html
