mongodb内嵌数据对象有什么属性

 我来答
加Q937381119
2017-07-18 · 超过60用户采纳过TA的回答
知道小有建树答主
回答量:112
采纳率:0%
帮助的人:77.5万
展开全部
mognodb中, 如果数据结果类似如下:
[html] view plain copy
{
"_id" : ObjectId("67c898c2561e44e13a580f79"),
"_class" : "com",
"vin" : "123",
"msg" : [
{
"data" : {
"limit" : "1",
"fim" : "e_GLOB1"
},
"name" : "name1"
},
{
"data" : {
"limit" : "2",
"fim" : "e_GLOB2"
},
"name" : "name2"
}
],
"timestamp" : NumberLong(1470709430)
}

如果只想返回msg数组中name=name1的元素,即从内嵌数据对象中获取指定元素,可以通过aggregate查询以及$filter操作符实现.
[html] view plain copy
db.collectionname.aggregate({$match: {"msg.name": "name1"}}, {$project: {_id: 0, timestamp: "$timestamp", msg: {$filter: {input: "$msg", as: "msg", cond: {$eq: ["$$msg.name", "name1"]}}}}})

_id:0表示不返回_id字段,因为_id默认是返回的, 这里也取了timestamp字段.
返回结果如下:
[html] view plain copy
{ "msg" : [
{
"data" : {
"limit" : "1",
"fim" : "e_GLOB1"
},
"name" : "name1"
}
],
"timestamp" : NumberLong(1470709430)
}

注意$filter操作符是在3.2.*版本才加上的,所以以前的版本是没有这个操作符的.
nodejs代码:

[html] view plain copy
function(d, callback) {
var db = mongojs(mongoUri);
var condition = {
"timestamp": {$gte: parseInt(d.t1), $lte: parseInt(d.t2)},
"msg.name" : d.msg_name
};
db.collection(data_table_name).aggregate({$match: condition}, {$project: {_id: 0, timestamp: "$timestamp", msg: {$filter: {input: "$msg", as: "msg", cond: {$eq: ["$$msg.name", d.msg_name]}}}}}, function(err, data) {
if(err) {
callback(err);
} else {
callback(null, data);
}
db.close();
});
};
匿名用户
2017-07-18
展开全部
{
"_id" : ObjectId("67c898c2561e44e13a580f79"),
"_class" : "com",
"vin" : "123",
"msg" : [
{
"data" : {
"limit" : "1",
"fim" : "e_GLOB1"
},
"name" : "name1"
},
{
"data" : {
"limit" : "2",
"fim" : "e_GLOB2"
},
"name" : "name2"
}
],
"timestamp" : NumberLong(1470709430)
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式