mongodb - MongoDB $push 运算符并计算名称中的字符
问题描述
我已经在名为 people 的集合中使用以下数据填充了 Mongodb 中的数据库。
{ "_id" : 0, "name" : "Bernice Pope", "age" : 69, "date" : "2017-10-04T18:35:44.011Z" }
{ "_id" : 1, "name" : "Eric Malone", "age" : 57, "date" : "2017-10-04T18:35:44.014Z" }
{ "_id" : 2, "name" : "Blanche Miller", "age" : 35, "date" : "2017-10-4T18:35:44.015Z" }
{ "_id" : 3, "name" : "Sue Perez", "age" : 64, "date" : "2017-10-04T18:35:44.016Z" }
{ "_id" : 4, "name" : "Ryan White", "age" : 39, "date" : "2017-10-04T18:35:44.019Z"}
{ "_id" : 5, "name" : "Grace Payne", "age" : 56, "date" : "2017-10-04T18:35:44.020Z" }
{ "_id" : 6, "name" : "Jessie Yates", "age" : 53, "date" : "2017-10-04T18:35:44.020Z"}
{ "_id" : 7, "name" : "Herbert Mason", "age" : 37, "date" : "2017-10-4T18:35:44.020Z" }
{ "_id" : 8, "name" : "Jesse Jordan", "age" : 47, "date" : "2017-10-04T18:35:44.020Z"}
{ "_id" : 9, "name" : "Hulda Fuller", "age" : 25, "date" : "2017-10-04T18:35:44.020Z"}
基于人员集合,我需要创建一个名为 PeopleNames 的视图,如下所示:
{ "LengthOfName": 8, "names" : [ "Sue Perez" ]}
{ "LengthOfName" : 9, "names" : [ "Ryan White" ]}
{ "LengthOfName" : 10, "names" : [ "Eric Malone", "Grace Payne" ]}
{ "LengthOfName" : 11, "names" : [ "Bernice Pope", "Jessie Yates", "Jesse Jordan", "Hulda Fuller" ]}
{ "LengthOfName" : 12, "names" : [ "Herbert Mason" ]}
{ "LengthOfName" : 13, "names" : [ "Blanche Miller"]}
LengthOfName 是姓氏和名字中的字符总数。我的方法是首先将名称添加到数组中,使用$split
运算符拆分名称并使用$strLenCP
计数字符。
db.people.aggregate([
{
$project : {
name : 1,
name_array : [{$push : { $split : {$name : " "}}}]
}
}
,{
$unwind : "$name_array"
},{
$project : {
name : 1,
nameLength : {$strLenCP : $name_array}
}
},{
$group :{
_id : "$nameLength",
nameLength: 1
}
}])
但是我收到错误消息,说我的"$name_array" is undefined
任何想法?
解决方案
您可以按名称长度对文档进行分组(在使用 修剪名称中的空格之后$replaceAll
)并使用$push
将名称添加到names
数组中。然后,您可以添加一个$project
阶段以将LengthOfName
字段添加到文档中,最后添加一个$sort
阶段以按字段对文档进行排序LengthOfName
。
db.collection.aggregate([
{
$group: {
_id: {
$strLenCP: {
$replaceAll: {
input: "$name",
find: " ",
replacement: ""
}
}
},
names: {
$push: "$name"
}
}
},
{
$project: {
_id: 0,
LengthOfName: "$_id",
names: "$names",
}
},
{
$sort: {
LengthOfName: 1,
}
}
])
推荐阅读
- reactjs - redux-orm 的任何成功实现?有问题
- python-3.x - OSError:file.so:无法打开共享对象文件:没有这样的文件或目录
- c# - 观察继承类的 ReactiveObject.Changed 可能有效也可能无效
- java - 从不同的类中获取对象
- c# - VS 2019 显示潜在修复(完全合格与使用)
- bash - Bash shell 脚本打印行但不打印列
- oracle - (ORA-00603:ORACLE 服务器会话因致命而终止)在执行 DROP 表查询时随机生成
- html - 在翻译后的元素内定位文本
- python - 如何将我的数据框转换为完整的 int 数据框?
- okhttp - 如何断开 OkHttp3 sse 连接?