在嵌套在数组中的对象内获取字符串

时间:2018-09-27 13:32:59

标签: mongodb express mongoose

我有一个获取路由器,该路由器可以获取带有时间戳的订单

router.get('/api/order/:date/:time', function (req,res,next) {
  Box.find({orders: {date:req.params.date}}.then (function (order){
       console.log('GET ORDER / with ', req.params.date);
       res.send(order);
   }).catch(next);
});

:time只是为了让我的前端调用此特定的get,它在:date参数内提供时间戳记

现在是模型

const orderSchema = new Schema({
    name : { type : String },
    date : { type : String }, // date stamp of only YYYY/MM/DD
    orders : { type : Array}
});

在这一系列订单中,您可以找到以下元素:

"orders" : [ 
        {
        "type" : "Meat Lover Slice",
        "extraType" : "na",
        "extraInfo" : "na",
        "date" : "2018-09-27:08:47:07",
        "quantity" : "1",
        "size" : "medium",
        "crust" : "normal",
        "split" : false,

以此类推..(大约15个元素)

您可以在这一系列订单中看到带有YYYY/MM/DD:HH:MM:SS的时间戳(2018-09-27:08:47:07)。

我在路由器内

console.log('GET ORDER / with ', req.params.date) // > GET ORDER / with 2018-09-27:08:47:07

所以它确实收到了这条路线的时间。

但是有了参数,我该如何过滤出与该元素匹配的特定顺序?

order object

1 个答案:

答案 0 :(得分:0)

如果我正确地理解了问题,那么简短的答案是您不能这样做,那么就没有办法在标准查询中“过滤”子文档。 (请查看Return only matched sub-document elements within a nested array,以获得更深入的答案。)

您可以做的是使用MongoDB聚合(https://docs.mongodb.com/manual/aggregation/)或在收到查询结果后自行进行过滤。 我建议您自己进行过滤。