MongoDB和Mongoose:如何检索嵌套对象

MongoDB and Mongoose: How to retrieve nested Object

本文关键字:检索 嵌套 对象 何检索 Mongoose MongoDB      更新时间:2023-09-26

我有以下文档在我的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. 检索"date"小于给定日期的所有历史修订(1,2…)

你可以清楚地看到,这是我试图实现的一种版本控制。我也会感兴趣,如果这种数据结构将得到索引MongoDB,如果有可能有一个更好的方法。(例如,数组在对象内?)

这是不工作在MongoDB:

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

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

db.ips.findOne({电流。aksd:{$存在:真正}});

这个应该可以工作:

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

虽然Ritesh的回复是朝着正确方向迈出的一步,但我更希望获取文档内的当前对象文本及其成员,而不是整个文档。

1。)查询每个文档中所有嵌套的"current"

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") }