Mongo 数据库:查询嵌套 json
Mongo db : query on nested json
示例 json 对象:
{ "_id" : ObjectId( "55887982498e2bef5a5f96db" ),
"a" : "x",
"q" : "null",
"p" : "",
"s" : "{\"f\":{\"b\":[\"I\"]},\"time\":\"fs\"}" }
需要时间 = fs 的所有文件
我的查询:
{"s":{"time" : "fs"}}
超过 returns 零个产品,但事实并非如此。
这里有两个问题。首先 s
显然是一个字符串,因此您的查询无法工作。您可以按如下方式使用 $regex
,但效率不高:
{s: {$regex: '"time"\:"fs"'}}
我建议将 s
字段转换为适当的文档。您可以使用 JSON.parse
来做到这一点。可以使用 db.foo.find().snapshot().forEach
根据当前值更新文档。有关详细信息,请参阅 this answer。
第二个问题是您的查询完全错误。要匹配 time
字段,您应该使用点符号:
{"s.time" : "fs"})
示例 json 对象:
{ "_id" : ObjectId( "55887982498e2bef5a5f96db" ),
"a" : "x",
"q" : "null",
"p" : "",
"s" : "{\"f\":{\"b\":[\"I\"]},\"time\":\"fs\"}" }
需要时间 = fs 的所有文件 我的查询:
{"s":{"time" : "fs"}}
超过 returns 零个产品,但事实并非如此。
这里有两个问题。首先 s
显然是一个字符串,因此您的查询无法工作。您可以按如下方式使用 $regex
,但效率不高:
{s: {$regex: '"time"\:"fs"'}}
我建议将 s
字段转换为适当的文档。您可以使用 JSON.parse
来做到这一点。可以使用 db.foo.find().snapshot().forEach
根据当前值更新文档。有关详细信息,请参阅 this answer。
第二个问题是您的查询完全错误。要匹配 time
字段,您应该使用点符号:
{"s.time" : "fs"})