mongodb - 查询名称中带点的嵌套文档字段
问题描述
考虑这样一个集合:
> db.test.find({})
{ "_id" : ObjectId("5f969419d40c1580f2d4aa31"), "users" : { "foo@bar.com" : "baz" } }
{ "_id" : ObjectId("5f9694d4d40c1580f2d4aa33"), "users" : { "baz@test.com" : "foo" } }
我想查找users
包含 field的文档foo@bar.com
。首先我试过
> db.test.find({"users.foo@bar.com": { $exists: true } })
但它什么也没返回。由于字段名称中的点 (.),它正在寻找这样一个字段:users > foo@bar > com
它不存在。我了解到键名中的点可以转义,\u002e
所以我尝试了
> db.test.find({"users.foo@bar\u002ecom": { $exists: true } })
但它也没有返回任何内容。我想我没有正确逃脱。我该怎么做?
解决方案
您可以使用聚合来做到这一点。试试这个查询。
db.test.aggregate([
{
"$project": {
"users": {
"$objectToArray": "$users"
}
}
},
{
"$match": {
"users.k": "foo@bar.com"
}
},
{
"$project": {
"users": {
"$arrayToObject": "$users"
}
}
}
])
这里是Mongo游乐场
推荐阅读
- pine-script - 检测会话中断
- syntax - 如何在 Jison 的 bnf 表示法中调试减少/减少错误
- amazon-web-services - AWS 担任角色:“一个或多个字段中的信息无效。”
- visual-studio-code - VSCode 调试控制台颜色变化
- mariadb - 如果写入非复制数据库,MariaDB (10.5.8) Galera 集群节点的 GTID 不同步
- python - 正则表达式:仅提取单词前的数字
- java - 根据 JSP 中其他下拉列表的选定值动态填充下拉列表
- angular - ViewChild 在浏览器背面未定义
- python - dash.Dash 的属性是什么?
- c# - 为什么我不能将资源链接到位图?