【问题标题】:MongoDB and Mongoose: How to retrieve nested ObjectMongoDB 和 Mongoose:如何检索嵌套对象
【发布时间】:2014-10-16 12:35:47
【问题描述】:

我的 mongodb 集合中有以下文档:

{ 
    "current" : 
    { 
        "aksd" : "5555", 
        "BullevardBoh" : "123" 
    }, 

    "history" : 
    { "1" : { 
            "deleted" : false, 
            "added" : false, 
            "date" : "21-08-2014" 
            }
    }, 

    { "2" : { 
            "deleted" : false, 
            "added" : false, 
            "date" : "01-01-2013" 
            }
    }, 

    "_id" : ObjectId("53f74dad2cbfdc136a07bf16"), 
    "__v" : 0 
}

我有多个这样的文件。现在我想用我的 Mongoose/Express API 实现两件事。

  1. 查询每个文档中所有嵌套的"current",并将它们检索为 JSON 对象,如下所示:{"aksd":"5555","BullevardBoh":"123"},{..},{..}

  2. 检索所有历史修订 (1,2...),其中 "date" 小于给定日期。

您可以清楚地看到这是我正在尝试实施的一种版本控制。如果这种数据结构将被 MongoDB 索引以及是否可能有更好的方法,我也会感兴趣。 (例如,对象内部有数组?)

这在 MongoDB 中不起作用:

db.ips.findOne({current.aksd: {$exists:true}});

【问题讨论】:

    标签: javascript json angularjs mongodb mongoose


    【解决方案1】:

    我认为这里缺少该字段的引号:

    db.ips.findOne({current.aksd: {$exists:true}});

    这应该可以代替:

    db.ips.findOne({"current.aksd": {$exists:true}});
    

    【讨论】:

      【解决方案2】:

      虽然 Ritesh 的回复是朝着正确方向迈出的一步,但我宁愿获取文档中的当前对象字面量及其成员,而不是整个文档。

      1.) 查询每个文档中所有嵌套的“当前”

      db.ips.find({"current":{$exists:true}}, {"current":1});
      

      这将返回所有存在 aksd 文字的嵌套文档:

      { "current" : { "aksd" : "5555", "BullevardBoh" : "123" }, "_id" : ObjectId("53f74dad2cb3dc136a07bf16") }
      ...
      

      2.) 检索日期小于给定日期的历史修订:

      db.ips.find({"history.date": {$lt: "01-01-2014"}},{history:{$elemMatch:{date: {$lt:"01-01-2014"}}}});
      

      返回想要的嵌套日期文字:

      { "historie" : [  {  "date" : "01-01-2013",  "added" : false,  "deleted" : false } ], "_id" : ObjectId("53faf20f399a954b2b7736b6") }
      

      【讨论】:

        猜你喜欢
        • 2017-06-26
        • 2021-08-13
        • 2018-11-10
        • 1970-01-01
        • 2022-11-10
        • 2015-01-31
        • 1970-01-01
        • 2021-11-04
        • 2021-12-31
        相关资源
        最近更新 更多