mongodb - 处理字段名称中的空格
问题描述
这是该系列的外观:
{
"resident_ID": "23mgomeg3gmf32a",
"membership": "Bronze",
"Former City": "SARATOGA SPRINGS",
"Current City": "WHITE PLAINS"
}
// ----------------------------------------------
{
"resident_ID": "042tj03mf23ftwf",
"membership": "Gold",
"Former City": "NIAGRA FALLS",
"Current City": "NEW ROCHELLE"
}
// ----------------------------------------------
{
"resident_ID": "0rd86tx60pxfv5o",
"membership": "Bronze",
"Former City": "NIAGRA FALLS",
"Current City": "NIAGRA FALLS"
}
// ----------------------------------------------
{
"resident_ID": "v3g8myx7ltw4j77",
"membership": "Gold",
"Former City": "SARATOGA SPRINGS",
"Current City": "SARATOGA SPRINGS"
}
我想创建一个查询,该查询仅返回那些没有相同的前城市和当前城市的人的 resident_ID,用于拥有金牌会员资格的人,同时忽略缺失值。在 SQL 中,这相当于:
SELECT resident_ID, [Former City], [Current City]
FROM tbl_ReportedResidence
WHERE [Former City]=[Current City] AND membership='Gold'
AND [Former City] IS NOT NULL
AND [Current City] IS NOT NULL;
因此,预期的输出将是:
resident_ID Former City Current City
042tj03mf23ftwf NIAGRA FALLS NEW ROCHELLE
我尝试过使用以下内容,但他们会返回所有具有 Gold 会员资格和非空值的 resident_ID,同时忽略不等于检查前城市和当前城市:
db.getCollection("tbl_ReportedResidence").find(
{
"membership" : "Gold",
"Current City" : {
"$ne" : null
},
"Former City" : {
"$ne" : null
},
"$where" : "'Former City' != 'Current City'"
},
{
"resident_ID" : 1.0,
"Former City" : 1.0,
"Current City" : 1.0
}
);
我也尝试更换
"$where" : "'Former City' != 'Current City'"
基于之前的问题,我发现这似乎在问同样的事情:
"$expr": {"$ne": ["Former City", "Current City"]}
但不知何故,似乎没有任何效果,我一直得到相同的结果,忽略了我尝试过滤输出以仅包含不具有相同非空前城市和当前城市的文档!
编辑:由于事实证明我的方法不正确,我重命名了这个问题,以突出我的实现的潜在问题,以供未来可能遇到相同问题的人使用。
解决方案
首先要注意:您为自己增加了难度,选择了带有空格的属性名称。
现在,进入查询问题:有问题的属性,当使用 时$where
,需要在前面加上this
. this.Current City
而且由于空间的原因,您将无法使用点符号。您需要使用括号(例如this['Current City']
.
所以你的查询需要是这样的:
db.users.find(
{membership:"Gold",
"Current City": { $ne: null},
"Former City": { $ne: null},
$where: "this['Current City'] == this['Former City']"
})
如果您将属性重命名为没有空格,事情会变得更简单,因为您不需要到处都有那么多引号。例如,使用currentCity
and formerCity
:
db.users.find(
{membership:"Gold",
currentCity: { $ne: null},
formerCity: { $ne: null},
$where: "this.currentCity == this.formerCity"})
推荐阅读
- microk8s - 为什么我不能在 microk8s 控制器中部署图表,但我可以在 LXD 中完成
- c# - 如何使用 Pulumi 创建 Azure 混合连接?
- sql - SQL删除前导零
- project-reactor - 如何编写函数
, 通量 > 使用 opencsv - android - Android Q暗模式将可绘制表单的颜色从白色变为灰色
- php - 如何在不重复的情况下重定向到随机 HTML 页面?
- c# - 使用 HTTPClient 取消 PayPal 订阅会返回“Result = “{Not yet computed}”
- javascript - 上传文件时重复数据谷歌应用脚本和javascript
- javascript - 试图为deckgl六边形层创建一个控制面板(半径,上百分位......)
- algorithm - 矩阵中的邻居 - 算法