![](/img/trans.png)
[英]How to convert an array of elements to an object in a MongoDB projection
[英]How to put an array with or between items in mongodb projection query?
我有一个mongodb数据库,该数据库以以下格式存储项目:
{
"2013" : {
"2" : {
"1" : {
"item1" : {
"1" : {
"a_type" : 10,
"b_type" : 5,
}
},
"item2" : {
"v1" : {
"a_type" : 10,
"b_type" : 5,
}
},
},
"3" : {
"item1" : {
"1" : {
"a_type" : 10,
"b_type" : 5
},
"3" : {
"a_type" : 10,
"b_type" : 5
}
},
"item2" : {
"v1" : {
"a_type" : 10,
"b_type" : 5
}
},
}
}
}
"2014" : {
"1" : {
"5" : {
"item1" : {
"1" : {
"a_type" : 10,
"b_type" : 5
}
},
"item2" : {
"v2" : {
"a_type" : 10,
"b_type" : 5
}
},
},
},
}
"_id" : ObjectId("53b82417a4b4939c27e300ed")
}
我想在查询的特定日期获得一些特定的项目数据。 我可以用硬编码完成一天或更长时间,但是我想给它一个数组,该数组将自动填充特定的日期和项目名称,但是在堆栈和mongo文档中搜索超过一天后,我找不到任何东西。 请帮我解决一下这个。 查询获取一个特定的项目和日期是这样的:
db.collection(collectionName).findOne({}, {'2013.2.1.item1': 1, '2014.1.5.item2': 1}, function(err, res});
谢谢
想象一下,包含查询项的数组是:
var query = ['2013.2.1', '2014.1.5'];
由于您的数据库结构,您必须使用MongoDB投影来提取查询项,因此您应该执行以下操作
var projectionObj = {};
for(var item in query) {
projectionObj[item] = 1;
}
它将产生波纹管对象:
{
'2013.2.1': 1,
'2014.1.5': 1
}
然后,您可以将其传递给MongoDB find函数,如下所示:
db.collection([collectionName]).find({}, projectionObj);
它将完全返回您想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.