用 Javascript 中的键值对重构对象数组并输出或发出它以用 mongoose 和 MongoDB 保存它?

Posted

技术标签:

【中文标题】用 Javascript 中的键值对重构对象数组并输出或发出它以用 mongoose 和 MongoDB 保存它?【英文标题】:Restructure object array with key value pairs in Javascript and output or emit it to save it with mongoose and MongoDB? 【发布时间】:2020-10-15 18:33:20 【问题描述】:

我是 JS 新手,使用 node.js、express 和 mongoose,并且有一个包含随机且不可预测的键值对的传入数组。

 // Example
 const simpleArray = 
      d: "h",
      e: "i",
      f: "j",
      g: "k",
    ;

我需要重组这个数组以便将它推送到我的 Mongo 数据库中。所以上面重构示例的结果需要如下所示:

// Restructured example
user.details.d.push(name:"h", date: Date.now(),);
user.details.e.push(name:"i", date: Date.now(),);
user.details.f.push(name:"j", date: Date.now(),);
user.details.g.push(name:"k", date: Date.now(),);

// After this restructering, I like to push it to the user database:
const user = await User.findById(userId);
await user.save();

我已经花了几个小时来重组 simpleArray,最终得到了一个选项:

for (const [key, value] of Object.entries(basis)) 
      console.log(
        `user.details.$key.push(name:"$value", date: Date.now(),);`
      );
    

问题:我不喜欢将它记录到控制台。我必须在'await user.save();'之前提供它。如果我用 return 替换 console.log(),它突然就不再工作了。做什么,它可用于 'await user.save();'并将其存储在数据库中?? 我用谷歌搜索了很多,经常使用 console.log() 代替进一步使用代码的实用方法。

最后它应该像这样工作:

// Example
     const simpleArray = 
          d: "h",
          e: "i",
          f: "j",
          g: "k",
        ;

//Loop
     for (const [key, value] of Object.entries(basis)) 
          console.log(
            `user.details.$key.push(name:"$value", date: 
     Date.now(),);`
            );
          
//Result
//user.details.d.push(name:"h", date: Date.now(),);
//user.details.e.push(name:"i", date: Date.now(),);
//user.details.f.push(name:"j", date: Date.now(),);
//user.details.g.push(name:"k", date: Date.now(),);



// Push to database
     const user = await User.findById(userId);
     await user.save();

【问题讨论】:

你为什么要记录它?你不能只使用示例中的代码吗?比如:user.details[key].push(name: value, date: Date.now())? 这不起作用:var user = await User.findById(userId); for (const [key, value] of Object.entries(basis)) user.details.$key.push(name:"$value", date: Date.now(),);; 等待 user.save();如果我在 await user.save 之前硬编码一个重组的示例,它可以正常工作。但没有这个功能。所以数据模型有效且适合。 访问密钥的语法不是object.$key,而是object[key]。此外,如果您想插入字符串,"$value" 将不起作用,`$value` 是正确的语法(反引号而不是双引号)。如果value 已经是一个字符串,你可以直接使用value 而不是将它包含在一个字符串中。 但是如果我 console.log 它,它提供了所需的和上面提到的 // 重组的例子。所以我认为它显然有效。 循环函数的结果应该返回并且看起来像“重组示例”。 Restructured 示例是本例中基于 simpleArray 循环的结果。 【参考方案1】:

我有可行的解决方案:

 // Loop over random array
    Object.keys(simpleArray).forEach((item) => 
            user.details[item].push(
            name: simpleArray[item],
            date: Date.now(),
          );
        );

【讨论】:

以上是关于用 Javascript 中的键值对重构对象数组并输出或发出它以用 mongoose 和 MongoDB 保存它?的主要内容,如果未能解决你的问题,请参考以下文章

在空手道 Netty 场景中匹配请求中的键值对

BigQuery:将数组中的键值对转换为列

javascript 删除对象内的键值对

map 中的键值都可以是啥类型的啊

EasyClick JavaScript 键值对存值

如何遍历对象数组并制作键值对?