【问题标题】:MongoDB slice array and retrieve only that array field in projectionMongoDB 切片数组并仅检索投影中的该数组字段
【发布时间】:2020-02-18 15:26:07
【问题描述】:

我有一个 mongodb 架构,其中文档按照以下结构,

{"_id":"5e4aaadefrbff2150c42ed5b",
"data":[{"time":"15:24:31","amount":"34"},{"time":"15:24:33","amount":"38"},,{"time":"15:24:35","amount":"95"}],
"code":"S04",
"rollnumber":4,
"intime":"2020-02-16T12:24:21.921Z"}

在我的 node.js 代码中,我以这种方式获取数据以找到最后一个数组值,

mycollection.find({ code: "S04", rollnumber: 4 }, { "_id": 0, code: 0, rollnumber: 0, intime: 0, data: { $slice: -1 } }, (err, result) => {
            if (err) { console.log('err', err); }
            console.log(result)
            res.json(result);
        });

问题是,我只想要数组结果,因此放置所有其他键:0。当我只输入data:1, data: { $slice: -1 } 时它不起作用

它在 put data:1 没有切片运算符时起作用。在生产中,列表会很大,所以我不能将所有带有 :0 的键放在查询中。请建议如何将 $slice 与 :1 一起放置以仅显示过滤后的数组。

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    它不会那样工作,如果你包含_id 它应该可以工作,但你只需要 data 那么你也可以试试这个:

    db.collection.aggregate([
                  {$match : {code: "S04", rollnumber: 4}},
                  {$project : { _id :0, data : {$slice : [ "$data", -1 ]}}}
    ])
    

    测试: MongoDB-Playground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-31
      • 2016-03-26
      • 2019-01-13
      • 2014-07-11
      • 2021-07-23
      • 2015-05-12
      • 1970-01-01
      相关资源
      最近更新 更多