javascript - 将元素从一个对象添加/合并到数组内的另一个对象

标签 javascript arrays mongodb mongoose ecmascript-6

我的异步函数中有以下代码

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/

相关文章:

node.js - Azure Functions 在 Node 中加载 MongoDB 时发生崩溃

java - Mongo java 驱动程序 - 检索没有任何其他字段的数组切片

javascript - window.alert() 后无法编辑输入文本字段

javascript - 有没有办法在 react 最终形式中禁用嵌套字段名称功能?

PHP 将引用从一个数组复制到另一个数组

ruby-on-rails - Ruby - 如何解析数组中的日期

javascript - 如何在jquery中的onclick中传递参数

JavaScript 的 Object.create 方法

javascript - 使用 lodash 过滤另一个数组的元素

java - 使用 mongodb 的 Java 驱动程序时如何限制结果数?