我的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实现两件事。
查询每个文档中的所有嵌套"current"
并将其作为JSON对象检索,如:{"aksd":"5555","BullevardBoh":"123"},{..},{..}
。
检索"date"
小于给定日期的所有历史记录修订版(1,2 ...)。
您可以清楚地看到这是我试图实现的一种版本控制。如果这种数据结构将被MongoDB索引并且可能有更好的方法,我也会感兴趣。 (例如,在对象内有数组?)
这在MongoDB中不起作用:
db.ips.findOne({current.aksd: {$exists:true}});
答案 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") }