Node.js-Express中NeDB嵌套字段r的查询问题求助
解决NeDB嵌套字段查询的问题
嘿,我来帮你搞定这个问题!你现在遇到的情况其实是NeDB(和MongoDB语法很像)查询嵌套对象的常见误区,我给你拆解一下:
为什么你的查询返回空数组?
你用database.find({"r":{ID:"9102867"}})这种写法时,NeDB会尝试完全匹配整个r对象——也就是说,只有当数据库里的r对象和你传入的{ID:"9102867"}完全一模一样(没有其他字段)时,才会命中结果。但你的r里还有Processing_Equipment、Model这些额外字段,所以自然查不到啦。
另外还要注意:你的数据里ID的实际值是"\"9102867\""(也就是存储的字符串是带双引号的:"9102867"),而你查询时写的是"9102867",这俩本身就不相等,这也是查不到的一个关键原因。
正确的查询方式
1. 用点符号查询单个嵌套字段(最推荐)
NeDB支持MongoDB风格的点符号,直接定位到嵌套字段,写法简单清晰:
// 注意要匹配数据里带引号的ID值 database.find({"r.ID": "\"9102867\""}, function(err, docs) { console.log(docs); });
如果这个带引号的值是插入数据时的意外(比如转义错误),你可以先修正数据,然后用不带引号的值查询:
// 假设ID实际应该是9102867(不带外层引号) database.find({"r.ID": "9102867"}, function(err, docs) { console.log(docs); });
2. 匹配多个嵌套字段的写法
如果你需要同时匹配r里的多个字段,可以直接用多个点符号组合:
// 同时匹配ID和Model database.find({ "r.ID": "\"9102867\"", "r.Model": "\"VTP 1500\"" }, function(err, docs) { console.log(docs); });
额外提醒
看你的数据结构,所有嵌套字段的值都带了转义的双引号,这大概率是插入数据时的格式问题,建议检查一下你的插入逻辑,避免后续查询因为字符串格式问题踩坑。
内容的提问来源于stack exchange,提问作者user5895892
相关产品推荐
相关产品推荐

