簡體   English   中英

MongoDB中的$ project查詢與貓鼬

[英]$project query in MongoDB with mongoose

鑒於此文件:

"_id" : ObjectId("5a4ea040825de6c0bbbcc810"),
"onOpened" : [ 
        {
            "createdOn" : ISODate("2018-01-04T21:46:56.756Z"),
            "_id" : ObjectId("5a4ea0d0825de6c0bbbcc828")
        }, 
        {
            "createdOn" : ISODate("2018-01-04T21:57:24.939Z"),
            "_id" : ObjectId("5a4ea344a7513e0d27642494")
        }, 
        {
            "createdOn" : ISODate("2018-01-05T18:27:26.839Z"),
            "_id" : ObjectId("5a4fc38e62a06a8cced22657")
        }]
"onSynched" : [ 
        {
            "createdOn" : ISODate("2018-01-04T21:46:56.756Z"),
            "_id" : ObjectId("5a4ea0d0825de6c0bbbcc828")
        }, 
        {
            "createdOn" : ISODate("2018-01-04T21:57:24.939Z"),
            "_id" : ObjectId("5a4ea344a7513e0d27642494")
        }, 
        {
            "createdOn" : ISODate("2018-01-05T18:27:26.839Z"),
            "_id" : ObjectId("5a4fc38e62a06a8cced22657")
        }]

我試圖在MongoDB / Mongoose中進行aggregate查詢,以便只能從給定的日期范圍中選擇元素。 我嘗試了這個:

module.exports.getWorksetStats = function (req, res) {
    var id = req.params.id;
    var from = new Date(req.query.from);
    var to = new Date(req.query.to);
    HealthRecords
        .aggregate(
            [
                {$match: {_id: id}},
                {$project: {
                    'onOpened': {$filter: {
                        input: '$onOpened',
                        as: 'item',
                        cond: {$and: [
                            {$gte: ['$$item.createdOn', from]},
                            {$lte: ['$$item.createdOn', to]}
                        ]}
                    }}
                }}
            ]
        ).exec(function (err, response){
            var result = {
                status: 200,
                message: response
            };
            if (err){
                result.status = 500;
                result.message = err;
            } else if (!response){
                result.status = 404;
                result.message = err;
            }
            res.status(result.status).json(result.message);
        });
};

不幸的是,這似乎返回了一個空數組。 誰能想到我在這里做錯了什么?

另外,目標是在單個查詢中在此處做一些事情,但是我認為我可以從此開始。 我們的想法是真的:1.獲取onOpened按日期范圍過濾,2 onSynched按日期范圍,3和另一個集合但有過濾$slice: -1

我正在使用MongoDB 3.4.7和Mongoose 4.5.5。

嘗試這個

db.getCollection('TEST').aggregate([{
        $match: {
            _id: id
        }
    },
    {
        $project: {
            onOpened: {
                $filter: {
                    input: "$onOpened",
                    as: "item",
                    cond: {
                        $gte: ['$$item.createdOn', from],
                        $lte: ['$$item.createdOn', to]
                    }
                }
            },
            onSynched: 1
        }
    }
]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM