用 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 保存它?的主要内容,如果未能解决你的问题,请参考以下文章