Node.js $lookup在具有表的对象数组上
我有一个包含数组的数据对象。我有一张桌子Node.js $lookup在具有表的对象数组上,node.js,mongodb,aggregation-framework,lookup,Node.js,Mongodb,Aggregation Framework,Lookup,我有一个包含数组的数据对象。我有一张桌子 如果数组的Id应该等于提供程序的表IdId==Id 如果重复id,则重复计数为memberscontselsemembersconts=0 添加带有数据对象的membersCounts 数据对象 const data = { Milk: [ { Id: 1, name: 'a' }, { Id: 2, name: 'b' }, { Id: 3,
Id==Id
membersconts
elsemembersconts=0
membersCounts
const data = {
Milk: [
{
Id: 1,
name: 'a'
},
{
Id: 2,
name: 'b'
},
{
Id: 3,
name: 'c'
},
{
Id: 4,
name: 'd'
},
{
Id: 52,
name: 'e'
}
],
Grocery: [
{
Id: 8,
name: '2a'
},
{
Id: 22,
name: '2b'
},
{
Id: 32,
name: '2c'
},
{
Id: 42,
name: '2d'
}
]
}
{ Milk:
[ { Id: 1, name: 'a', memberCounts: 5 },
{ Id: 2, name: 'b', memberCounts: 1 },
{ Id: 3, name: 'c', memberCounts: 2 },
{ Id: 4, name: 'd', memberCounts: 1 },
{ Id: 52, name: 'e', memberCounts: 1 } ],
Grocery:
[ { Id: 8, name: '2a', memberCounts: 0 },
{ Id: 22, name: '2b', memberCounts: 0 },
{ Id: 32, name: '2c', memberCounts: 0 },
{ Id: 42, name: '2d', memberCounts: 0 } ] }
提供者表
const providers = [
{
id: 1,
status: 'active'
},
{
id: 1,
status: 'active'
},
{
id: 1,
status: 'active'
},
{
id: 1,
status: 'active'
},
{
id: 4,
status: 'active'
},
{
id: 2,
status: 'active'
},
{
id: 3,
status: 'active'
},
{
id: 3,
status: 'active'
},
{
id: 52,
status: 'active'
},
{
id: 1,
status: 'active'
}
]
这里是javascript代码
const providers = [
{
id: 1,
status: 'active'
},
{
id: 1,
status: 'active'
},
{
id: 1,
status: 'active'
},
{
id: 1,
status: 'active'
},
{
id: 4,
status: 'active'
},
{
id: 2,
status: 'active'
},
{
id: 3,
status: 'active'
},
{
id: 3,
status: 'active'
},
{
id: 52,
status: 'active'
},
{
id: 1,
status: 'active'
}
]
这段代码运行良好,但我希望使用mongodb查询执行这项操作。因此,性能是好的。
可以使用mongodb查询。我需要将javascript代码转换为mongodb查询
getMembersWithVendors(data, providers) {
for (var key in data) {
var arr = data[key]
arr.forEach((element) => {
element.memberCounts = 0
element.new = true
providers.map((el) => {
if (element._id == el.vendorId) {
(element.memberCounts = element.memberCounts + 1),
(element.new = false)
}
})
})
}
return data
}
输出
const data = {
Milk: [
{
Id: 1,
name: 'a'
},
{
Id: 2,
name: 'b'
},
{
Id: 3,
name: 'c'
},
{
Id: 4,
name: 'd'
},
{
Id: 52,
name: 'e'
}
],
Grocery: [
{
Id: 8,
name: '2a'
},
{
Id: 22,
name: '2b'
},
{
Id: 32,
name: '2c'
},
{
Id: 42,
name: '2d'
}
]
}
{ Milk:
[ { Id: 1, name: 'a', memberCounts: 5 },
{ Id: 2, name: 'b', memberCounts: 1 },
{ Id: 3, name: 'c', memberCounts: 2 },
{ Id: 4, name: 'd', memberCounts: 1 },
{ Id: 52, name: 'e', memberCounts: 1 } ],
Grocery:
[ { Id: 8, name: '2a', memberCounts: 0 },
{ Id: 22, name: '2b', memberCounts: 0 },
{ Id: 32, name: '2c', memberCounts: 0 },
{ Id: 42, name: '2d', memberCounts: 0 } ] }
谢谢
这段代码运行良好,但我希望使用mongodb查询执行这项操作。因此,性能是好的
在查询中执行所有操作不是一个好主意,它可能会导致性能问题,因为您的输入数据太大了,但您可以改进一些东西
通过查询$group
并获取计数,这将返回唯一的id及其总计数id
- 对象数组的迭代循环
- 根据id从提供程序中查找
- 从筛选的文档中获取计数
post数据是如何存储在dbLarge json filepost模型中的,jsonGrocey和Milk中的数据很少是动态字段。好的,如果可能的话,我会尝试尽快更新您。数据不是表,它是我的input对象哦,这很奇怪,您不需要在查询中完成所有操作,您可以在nodejs端完成一半,让我检查1。数据是对象2。提供程序从提供程序表中获取记录。