javascript - 如何将结果从猫鼬分组为较小的子数组
问题描述
我在 mongo 中的数据如下:
{
"name":"XYz",
"type":"A"
}
{
"name":"XYz",
"type":"B"
}
{
"name":"XYz",
"type":"C"
}
{
"name":"XYz",
"type":"C"
}
假设如果这样做
const alldata=MODEL.find()
我希望我的所有数据结构看起来像:
{
"A":[
{
"name":"XYz",
"type":"A"
}
],
"B":[
{
"name":"XYz",
"type":"A"
}
],
"C":[
{
"name":"XYz",
"type":"C"
}
,{
"name":"XYz",
"type":"C"
}
]
}
mongoose 中是否有任何直接查询来执行此操作,或者我是否必须通过获取所有对象手动执行此操作,然后相应地进行过滤和聚合?
解决方案
您可以使用aggregate()来实现,
$group
按类型制作根文档数组,$arrayToObject
将 k(key) 和 v(value) 格式从数组转换为对象$repalceRoot
将上面转换的对象替换为根
YourSchemaName.aggregate([
{
$group: {
_id: "$type",
root: { $push: "$$ROOT" }
}
},
{
$replaceRoot: {
newRoot: {
$arrayToObject: [[
{
k: "$_id",
v: "$root"
}
]]
}
}
}
])
推荐阅读
- java - 当我在 nssm 的帮助下将 jar 作为服务运行时,JOptionPane.showOptionDialog() 没有出现
- sql - 如何减去两个日期时间值?
- ruby - 使用 kubeclient ruby gem 的 K8s API 请求返回错误请求 (400)
- mongodb - 无法通过学说连接mongodb
- reactjs - 防止反应应用在测试时发出实际请求
- android - 升级 okhttp 后出现 BootstrapMethodError
- react-native - Hash Tag '#' 未显示在拨号盘 react-native(电话号码)中
- android - Android - 如何允许点击 alertdialog 后面的项目?
- java - 如何处理不带或不带查询参数的请求
- mysql - 您可以使用 TEXT 数据类型创建表字段吗