我正在使用MongoDB驱动程序在下面创建查询。我只是想知道两个代码的功能有什么区别:
返回0;的地址:{ “houseBldgNum”}
db.students.count({ "studentName" : { "$regex" : "(.+)?JAN(.+)?" , "$options" : "i"} , "address" : {"houseBldgNum" : { "$regex" : "(.+)3(.+)?" , "$options" : "i"} }})
返回2;的 address.houseBldgNum
db.students.count({ "studentName" : { "$regex" : "(.+)?JAN(.+)?" , "$options" : "i"} , "address.houseBldgNum" : { "$regex" : "(.+)3(.+)?" , "$options" : "i"} })
数据:
{
"studentName":"JAN M",
"address":{
"houseBldgNum":"3"
},
"studentName":"JAN K",
"address":{
"houseBldgNum":"35"
}
}
我希望这两个代码应该返回相同的结果,但不是。
提前致谢!
答案 0 :(得分:0)
根据您上面提供的示例数据,"houseBldgNum":"3"
是文档中的文档。
{
"studentName":"JAN M",
"address":{
"houseBldgNum":"3"
}
要访问单个文档值,只需提供键值对即可。就像address:{"houseBldgNum"}
但要访问文档中的文档,您需要使用。(点)表示法来访问内部字段。
所以正确的语法是使用address.houseBldgNum
答案 1 :(得分:0)
第二个查询的作用是“地址”是嵌入在顶级文档中的嵌套json文档。如果要访问嵌套文档,则需要使用“address.houseBldgNum”符号。
摘自MongoDB文档:
点符号 MongoDB使用点表示法来访问数组的元素并访问子文档的字段。
要通过从零开始的索引位置访问数组的元素,请将数组名称与点(。)和从零开始的索引位置连接起来,并用引号括起来: 'array.index' 要使用点表示法访问子文档的字段,请将子文档名称与点(。)和字段名称连接起来,并用引号括起来: 'subdocument.field'