我在mongodb中有一个问题。 例如:
"times" : [
{
"start" : first_date,
"end" : ISODate("2017-03-10T12:00:00.000Z")
},
{
"start" : ISODate("2017-03-10T14:00:00.000Z"),
"end" : ISODate("2017-03-10T18:10:00.000Z")
},
{
"start_time" : ISODate("2017-03-11T08:00:00.000Z"),
"end" : last_date
}
],
这是最新文档。 我想把这个文件做成那样的
"times" : {
"start" : first_date,
"end" : last_date
},
我该怎么办?
答案 0 :(得分:0)
db.collection.aggregate([{
"$unwind": "$times"
}, {
$project: {
_id: 0,
times: 1
}
}])
答案 1 :(得分:0)
您可以尝试以下聚合。
使用$arrayElemAt
至$project
第一个和最后一个times
值,然后使用另一个$project
来选择开始和结束时间。
db.collection.aggregate([
{$project:{first:{$arrayElemAt: ["$times", 0]},
last:{$arrayElemAt: ["$times", -1]}}},
{$project:{_id:0, "times.start":"$first.start", "times.end":"$last.end"}}])
您可以使用$let
运算符在单个阶段保存$arrayAtElem
和$project
值的结果。
db.collection.aggregate([
{$project:{"times.start":{$let: {vars: {obj: {$arrayElemAt: ["$times", 0]}},
in: "$$obj.start"}},
"times.end":{$let: {vars: {obj: {$arrayElemAt: ["$times", -1]}},
in: "$$obj.end"}}
}}])