使用 Mongoose 将数组('tags')保存到 MongoDB
Saving an array (of 'tags') to MongoDB using Mongoose
我正在使用 Mongoose,但在保存到数组时遇到了问题。例如,我在 comma-separated tags 的页面上有一个输入字段。我从 req.body.tags 中抓取这些,删除白色 space,并用逗号分隔它们以获得标签数组。现在,如何将这个数组保存回我的数据库?我猜我将模式的这一部分设置错了,但老实说,我不确定什么是正确的。到目前为止我的架构是:
var postSchema = mongoose.Schema({
title: String,
permalink: String,
content: String,
author: {
id: String,
name: String,
},
postDate: {
type: Date,
default: Date.now
},
});
如果我要保存标签(例如,来自 post),最好有一个名为 tags 的数组,然后每个标签都有一个名称(和 ID?)?如果是这样,我是否会在架构中添加类似这样的内容(如下)?将标签添加到 post 的想法是,我可以在 post 上显示它们(作为链接),并能够在数据库中搜索具有特定标签的所有 post。这是正确的做法吗?
tags: [{
name: String,
id: String
}]
当post前往新post路线时,我正在执行以下操作:
post = new Post(req.body);
tags = req.body.tags.replace(/\s/g,'').split(',');
// maybe post.tags = tags ?
post.save(function(err) {
if (!err) {
res.redirect('/posts');
} else {
...
}
});
这成功保存了提交的所有其他字段(标题、作者、内容等),但我不确定如何保存 newly-created 标签到数据库。这里的任何建议都将非常受欢迎,因为我是新手并且渴望继续学习。谢谢!
如果你真的想让你的 "tags" 数组有一个名称字段和一个生成的 _id
字段然后定义另一个模式并嵌入它:
var tagSchema = mongoose.Schema({
name: String
});
var postSchema = mongoose.Schema({
title: String,
permalink: String,
content: String,
author: {
id: String,
name: String,
},
postDate: {
type: Date,
default: Date.now
},
tags: [tagSchema]
});
然后在创建 Post
对象之前将输入操作为正确的结构:
req.body.tags = req.body.tags.replace(/\s/''/g).split(",").map(function(tag) {
return { "name": tag };
});
var post = new Post(req.body);
或者将其保留为纯字符串数组:
var postSchema = mongoose.Schema({
title: String,
permalink: String,
content: String,
author: {
id: String,
name: String,
},
postDate: {
type: Date,
default: Date.now
},
tags: [String]
});
不用担心映射对象 属性:
req.body.tags = req.body.tags.replace(/\s/''/g).split(",");
var post = new Post(req.body);
我正在使用 Mongoose,但在保存到数组时遇到了问题。例如,我在 comma-separated tags 的页面上有一个输入字段。我从 req.body.tags 中抓取这些,删除白色 space,并用逗号分隔它们以获得标签数组。现在,如何将这个数组保存回我的数据库?我猜我将模式的这一部分设置错了,但老实说,我不确定什么是正确的。到目前为止我的架构是:
var postSchema = mongoose.Schema({
title: String,
permalink: String,
content: String,
author: {
id: String,
name: String,
},
postDate: {
type: Date,
default: Date.now
},
});
如果我要保存标签(例如,来自 post),最好有一个名为 tags 的数组,然后每个标签都有一个名称(和 ID?)?如果是这样,我是否会在架构中添加类似这样的内容(如下)?将标签添加到 post 的想法是,我可以在 post 上显示它们(作为链接),并能够在数据库中搜索具有特定标签的所有 post。这是正确的做法吗?
tags: [{
name: String,
id: String
}]
当post前往新post路线时,我正在执行以下操作:
post = new Post(req.body);
tags = req.body.tags.replace(/\s/g,'').split(',');
// maybe post.tags = tags ?
post.save(function(err) {
if (!err) {
res.redirect('/posts');
} else {
...
}
});
这成功保存了提交的所有其他字段(标题、作者、内容等),但我不确定如何保存 newly-created 标签到数据库。这里的任何建议都将非常受欢迎,因为我是新手并且渴望继续学习。谢谢!
如果你真的想让你的 "tags" 数组有一个名称字段和一个生成的 _id
字段然后定义另一个模式并嵌入它:
var tagSchema = mongoose.Schema({
name: String
});
var postSchema = mongoose.Schema({
title: String,
permalink: String,
content: String,
author: {
id: String,
name: String,
},
postDate: {
type: Date,
default: Date.now
},
tags: [tagSchema]
});
然后在创建 Post
对象之前将输入操作为正确的结构:
req.body.tags = req.body.tags.replace(/\s/''/g).split(",").map(function(tag) {
return { "name": tag };
});
var post = new Post(req.body);
或者将其保留为纯字符串数组:
var postSchema = mongoose.Schema({
title: String,
permalink: String,
content: String,
author: {
id: String,
name: String,
},
postDate: {
type: Date,
default: Date.now
},
tags: [String]
});
不用担心映射对象 属性:
req.body.tags = req.body.tags.replace(/\s/''/g).split(",");
var post = new Post(req.body);