云数据库MongoDB是支持嵌套的,比如数据如下:
{
_id:ObjectId("569ddc41f91e4b4747b5cb7b"),
id:"16399864",
timestamp:"1453185620",
tablename:"houseinfo",
dbname:"corp_officebuilding",
primaryKeys:"Id",
class:"class com.uban.dts.bean.DtsLog",
dbType:"MYSQL",
fieldCount:"138",
opt:"UPDATE",
fields:{"Status":{"dest":"0","orgi":"1420041600"}}
}
即在fields:{“Status”:{“dest”:”0”,”orgi”:”1420041600”}}部分定义了嵌套文档。比如查询的一个案例如下:
db.a.find({'opt' : "UPDATE",'fields.Status':{$exists:true}})
查询结果如下:
注意:在保存嵌套数据时,如下的方式是嵌套 fields:{"Status":{"dest":"0","orgi":"1420041600"}}。如果使用了 fields:"{"Status":{"dest":"0","orgi":"1420041600"}}"这种引号的方式则是定义的fields字符串,并非是嵌套。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在阿里云的云数据库MongoDB服务中,处理和查询嵌套文档是其强大功能之一。您提供的示例很好地展示了如何在MongoDB中存储嵌套数据以及如何执行查询来定位这些嵌套结构中的特定信息。
如您所示,正确的嵌套文档存储方式如下:
{
"_id": ObjectId("569ddc41f91e4b4747b5cb7b"),
"id": "16399864",
"timestamp": "1453185620",
"tablename": "houseinfo",
"dbname": "corp_officebuilding",
"primaryKeys": "Id",
"class": "class com.uban.dts.bean.DtsLog",
"dbType": "MYSQL",
"fieldCount": "138",
"opt": "UPDATE",
"fields": {
"Status": {
"dest": "0",
"orgi": "1420041600"
}
}
}
这里fields
字段包含了一个嵌套的对象,其中Status
也是一个对象,具有dest
和orgi
两个属性。
您给出的查询案例是查找所有opt
字段为"UPDATE"且fields.Status
存在的文档:
db.a.find({'opt' : "UPDATE", 'fields.Status': {$exists: true}})
这个查询会返回所有opt
字段等于"UPDATE"并且fields
对象中包含Status
子对象的所有文档。
fields:"{'Status':...}"
)会导致这部分被解释为字符串而不是嵌套文档。$exists
操作符,MongoDB还提供了丰富的查询操作符(如$elemMatch
、$gt
、$lt
等)来处理复杂查询,包括对嵌套文档的深入筛选。在阿里云的MongoDB服务中,您可以直接通过控制台或者使用MongoDB客户端、驱动程序来执行上述查询,享受高可用、自动备份和弹性伸缩等云服务特性。