MongoDB和Mongoose:如何检索嵌套的Object

时间:2014-08-22 15:36:32

标签: javascript json angularjs mongodb mongoose

我的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 ...)。

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

    这在MongoDB中不起作用:

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

2 个答案:

答案 0 :(得分:1)

我认为这个领域的引用在这里缺失:

  

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

这应该起作用:

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

答案 1 :(得分:0)

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