mongodb从内嵌数据对象中获取指定元素
2016-09-05 17:02
330 查看
在mognodb中, 如果数据结果类似如下:
如果只想返回msg数组中name=name1的元素,即从内嵌数据对象中获取指定元素,可以通过aggregate查询以及$filter操作符实现.
_id:0表示不返回_id字段,因为_id默认是返回的, 这里也取了timestamp字段.
返回结果如下:
注意$filter操作符是在3.2.*版本才加上的,所以以前的版本是没有这个操作符的.
nodejs代码:
{ "_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操作符实现.
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字段.
返回结果如下:
{ "msg" : [ { "data" : { "limit" : "1", "fim" : "e_GLOB1" }, "name" : "name1" } ], "timestamp" : NumberLong(1470709430) }
注意$filter操作符是在3.2.*版本才加上的,所以以前的版本是没有这个操作符的.
nodejs代码:
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(); }); };
相关文章推荐
- WPF中获取指定坐标依赖对象数据项
- 获取js对象中的指定数据
- nodejs 向mongodB获取指定数目的数据
- Mongodb删除内嵌数组指定对象
- thinkphp循环数据到页面时,jquery$(this)动态获取指定元素的数据
- 【MongoDB】递归获取字段更新表达式,更新复杂数据类型对象
- DataTables获取指定元素的行数据
- 一、数据、数据元素、数据对象、数据结构的定义
- 用Javascript 获取指定页面元素的位置
- 搜索指定数据在那个对象中存在.sql
- 从IXMLDOMDocument2中获取指定编码(如UTF-8)格式的数据
- 使用DataAdapter对象获取数据
- 基于对象的JavaScript实现无刷新页面发送和获取数据Ajax.js
- 用 Javascript 获取指定页面元素的位置
- 搜索指定的数据在哪个对象中存在
- 按指定排列顺序获取数据的sql语句
- 使用SqlDataAdapter对象获取数据
- 用 Javascript 获取指定页面元素的位置
- 将指定excel文件中的数据转换成datatable对象,供应用程序进一步处理
- 搜索指定数据在那个对象中存在