使用 mongoose 将字符串数组推送到 mongoDB
Posted
技术标签:
【中文标题】使用 mongoose 将字符串数组推送到 mongoDB【英文标题】:push array of strings to mongoDB with mongoose 【发布时间】:2021-02-17 13:37:06 【问题描述】:我不确定如何使用 mongoose 将输入字段中的字符串数组保存到 mongoDB。
理想情况下,我想在创建数组的同一输入字段中多次输入文本。所以我最终会得到这样的东西。
title: "这是我的标题"
动作:[“走路”、“微笑”、“大笑”]
EJS 文件:
<form action="/blogs" method="POST">
<input type="text" placeholder="title" name="title" id="title" >
<input type="text" name="actions" id="actions" >
<button >submit</button>
</form>
blog.js
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const blogSchema = new Schema(
title:
type: String,
required: true,
,
actions: [
type: String,
,
],
,
timestamps: true
);
const Blog = mongoose.model("Blog", blogSchema);
module.exports = Blog;
app.js
app.post('/blogs', (req, res) =>
const blog = new Blog (
title: req.body.title,
actions: req.body.tags,
);
blog.save()
.then((result) =>
res.redirect('/blogs')
)
.catch((erro) =>
console.log(erro)
)
)
关于如何解决这个问题的任何指南?目前我唯一的解决方案是创建多个输入字段,但这是不正确的。
【问题讨论】:
【参考方案1】:您可能正在将数组作为字符串发送到 mongo。您可以通过检查 req.body.tags 的类型来检查这一点,如下所示:
console.log(typeof req.body.tags)
如果这返回一个字符串,请确保将内容作为 JSON 发送到数据库。
【讨论】:
【参考方案2】:如果actions
标签是预定义的并且是特定的,您可以使用html select multiple。这样操作属性将作为字符串数组发送
<form action="/blogs" method="POST">
<input type="text" placeholder="title" name="title" id="title" >
<label for="actions">Actions:</label>
<select name="actions" id="actions" multiple>
<option value="walking">walking</option>
<option value="smiling">smiling</option>
<option value="laughing">laughing</option>
</select>
<button >submit</button>
</form>
在控制器内部,您可以这样处理
// req.body.actions is already an array.
const blog = new Blog(req.body);
blog.save()
.then((result) =>
res.redirect('/blogs')
)
.catch((erro) =>
console.log(erro)
)
在任何情况下,如果您想使用文本输入来编写以空格或逗号分隔的操作,则操作属性将作为字符串发送。然后你可以在控制器内部将字符串转换为数组。
// In case of multiple spaces, replace with single space.
// Then split string to array of strings
let actions = req.body.actions.replace(/ +/g, " ").split(" ")
const blog = new Blog (
title: req.body.title,
actions
);
// rest of code
无论您选择做什么,操作都将作为字符串数组存储在数据库中。
【讨论】:
以上是关于使用 mongoose 将字符串数组推送到 mongoDB的主要内容,如果未能解决你的问题,请参考以下文章