如何从文档中的当前字段获取数组值?

时间:2016-07-20 12:23:45

标签: mongodb mongoose aggregation-framework

请帮助我: a使用此架构进行此类订单收集:

const OrderSchema =  new Schema(
{
    doctorId:       { type : Schema.Types.ObjectId, ref: 'Users'},
    patientId:      { type : Schema.Types.ObjectId, ref: 'Users'},
    orderTime:      { type : String , default:''},
    createdAt:      { type : Date, default:Date.now },
    approvedByDoctor:{ type :Boolean, default:false },
    price:{type:Number,default:0}
},

);

并且有10个像这样的文件,我必须做什么查询以获得" orderTime"从每个文件?谢谢

2 个答案:

答案 0 :(得分:2)

假设您的文档如下所示:

{
        "_id" : ObjectId("578f73d17612ac41eb736641"),
        "createdAt" : ISODate("2016-07-20T12:51:29.558Z")
}
{
        "_id" : ObjectId("578f73e57612ac41eb736642"),
        "createdAt" : ISODate("2016-07-20T12:51:49.701Z")
}

然后您可以生成包含createdAt日期数组的结果文档,如下所示:

{ "_id" : null, "creationDates" : [ ISODate("2016-07-20T12:51:29.558Z"), ISODate("2016-07-20T12:51:49.701Z") ] }

运行以下聚合查询:

db.<your_collection>.aggregate([{$group:{"_id":null,"creationDates":{$push:"$createdAt"}}}])

这将基本上对集合中的所有文档进行分组("_id":null),并将createdAt字段中的值推送到数组("creationDates":{$push:"$createdAt"}

答案 1 :(得分:1)

使用聚合框架创建数组。基本上,您需要对所有文档进行分组,使用 $push 累加器运算符来创建列表。按照这个例子来获得要点:

Order.aggregate([
    {
        "$group": {
            "_id": 0,
            "orderTimes": { "$push": "$orderTime" }         
        }
    }
]).exec(function(err, result) {
    console.log(result[0].orderTimes);
});