Mongodb 如何在mongdb中自定义数组
我在mongodb有一个问题。 例如:Mongodb 如何在mongdb中自定义数组,mongodb,Mongodb,我在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
"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
},
我该怎么办呢?你就这样试试
db.collection.aggregate([{
"$unwind": "$times"
}, {
$project: {
_id: 0,
times: 1
}
}])
你可以试试下面的聚合 使用
$arrayElemAt
到$project
第一个和最后一个时间
值,然后是另一个$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"}}
}}])
使用$unwind运算符解构数组是否要更改架构或需要“时间”:{“开始”:第一个日期,“结束”:最后一个日期}从数据库中提取时我需要它从数据库中提取时这不是我需要的。它仅根据_id分隔时间字段。太棒了,非常感谢