mongodb - MongoDb:直接查询不起作用
问题描述
我不太明白为什么在以下情况下会得到不同的结果:
> db.reference.find({"metadata.values": {address: {location: "barcelona"} } }).count();
0
> db.reference.find({"metadata.values.address.location": "barcelona"}).count();
1
有什么区别?
包含在reference
集合中的文档是:
{
"_id" : "Doc1Ref2",
"document" : "doc1",
"metadata" : [
{
"_id" : "Doc1Ref2Mdt1",
"user" : "user2",
"creationTimestamp" : ISODate("2018-09-24T12:20:56.169Z"),
"values" : {
"date" : ISODate("2018-09-24T12:20:56.171Z"),
"number" : 16,
"address" : {
"street" : "Av. Diagonal",
"location" : "barcelona"
},
"credentials" : [
{
"password" : "pwd",
"login" : "main"
},
{
"password" : "pwd",
"login" : "other",
"creation" : ISODate("2018-09-24T12:20:56.171Z")
}
],
"contact" : "contact name",
"tags" : [
"tag1",
"tag2"
]
}
}
],
"timestampCreation" : ISODate("2018-09-24T12:20:56.169Z")
}
解决方案
第一个查询匹配 wheremetadata.values
是一个精确对象 {address: {location: "barcelona"} }
的文档,第二个是 where metadata.values
有一个address.location
等于“barcelona”的对象。
javascript中的等效测试:
if ((document.metadata || {}).values == {address: {location: "barcelona"} })
和
if ((((document.metadata || {}).values || {}).address || {}).location == "barcelona")
推荐阅读
- root-framework - 如何创建根文件
- sql - 将 Wikipedia Dump 导入 MediaWiki 时出错
- c++ - 使用函数作为另一个函数的参数
- python - 如何在没有 itertools 的情况下替换 itertools.product?
- java - Maven 编译器插件使用自动 java 9 模块失败
- sql - 计算 varchar 数组 Postgres 中不同元素的数量
- python - 根据单独的 csv 中两列的两个值之间的比较删除 csv 行
- asp.net-core - 身份服务器 4 备用注销重定向 uri
- c# - 如何搜索客户并能够更新他们?
- r - 如何将图像渲染成图块?