我的异步函数中有以下代码
async function test () {
try {
const aucs = await auctions.find({owner: 'owner', place: 'place'}).limit(15);
const item = await Promise.all(aucs.map(async aucs => {
const map = await items.find({id: aucs.item});
return map[0]
}));
--->we are here [1]
} catch (err) {
console.log(err);
}
}
test();
和点[1]
我有两个可用的数组,其中包含另一个对象(都是来自Mongo的响应),它们是:
aucs = [ { _id: 5c00faa4936359120ceb3632,
auc: 177215422,
item: 130251,
price: 26000000,
lastModified: 1543567955000,
date: 2018-11-30T08:53:56.290Z,
__v: 0 },
{ _id: 5c00faa4936359120ceb363f,
auc: 177215440,
item: 130251,
price: 26000000,
lastModified: 1543567955000,
date: 2018-11-30T08:53:56.290Z,
__v: 0 },... ]
和
item = [ { _id: 5bcd8a6134cdd1223cd3239b,
id: 130251,
name: 'TEST_NAME_1',
__v: 0 },
{ _id: 5bcd8a6134cdd1223cd3239b,
id: 130252,
name: 'TEST_NAME_2',
__v: 0 },...]
我想将 aucs 中的每个元素添加到 aucs[i]
,item[i].name
(name: 'TEST_NAME_1'
)
喜欢:
combined = [ { _id: 5c00faa4936359120ceb3632,
auc: 177215422,
item: 130251,
name: 'TEST_NAME_1',
price: 26000000,
lastModified: 1543567955000,
date: 2018-11-30T08:53:56.290Z,
__v: 0 },...]
我正在尝试将 for
循环与 auc[i].name = item[i].name
或使用 aucs.push()
但由于某种未知的原因,它对我不起作用。
我收到 .push is not a function
错误,并且 for 循环没有添加任何内容。那么也许有人有任何想法?
Note: 1
实际上解决了一个项目问题,mongo 在数组中返回数组,如 [ [ { ...} ] ]
所以我应该使用 return map[0] 来修复它。
Note: 2
根据 typeof,aucs 和 item 都是对象,并且有 .length 选项(它们都是相同的长度,并且应该始终如此。所以它们不是 promise
Note: 3
let merged = {...aucs, ...item};
返回我
{ '0': { _id: 5bcd8a6134cdd1223cd3239b,
id: 130251,
name: 'JewelCraft',
icon: 'inv_jewelcrafting_70_jeweltoy',
stackable: 1,
isAuctionable: true,
__v: 0 }...
但不是我需要的
最佳答案
如果你在这里使用一些聚合技巧,会更优越、更快
auctions.aggregate([
{ "$match": { "owner": "owner", "place": "place" }},
{ "$lookup": {
"from": "items",
"let": { "item": "$item" },
"pipeline": [
{ "$match": { "$expr": { "$eq": ["$id", "$$item"] }}}
],
"as": "item"
}},
{ "$limit": 15 }
])
关于javascript - 将元素从一个对象添加/合并到数组内的另一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53572737/