Javascript 使用Mongoose将数组(';标记';)保存到MongoDB

Javascript 使用Mongoose将数组(';标记';)保存到MongoDB,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我在玩猫鼬游戏,我在保存到阵列时遇到了问题。例如,我在页面上有一个输入字段,用于逗号分隔的标记。我从req.body.tags中获取这些标签,去掉空白,然后用逗号将它们分割,得到一个标签数组。现在,如何将此数组保存回数据库?我猜我把模式的这一部分设置错了,但老实说,我不确定什么是对的。到目前为止,我的模式是: var postSchema = mongoose.Schema({ title: String, permalink: String, content: String,

我在玩猫鼬游戏,我在保存到阵列时遇到了问题。例如,我在页面上有一个输入字段,用于逗号分隔的标记。我从req.body.tags中获取这些标签,去掉空白,然后用逗号将它们分割,得到一个标签数组。现在,如何将此数组保存回数据库?我猜我把模式的这一部分设置错了,但老实说,我不确定什么是对的。到目前为止,我的模式是:

var postSchema = mongoose.Schema({
  title: String,
  permalink: String,
  content: String,
  author: {
    id: String,
    name: String,
  },
  postDate: {
    type: Date,
    default: Date.now
  },
});
如果我要保存标记(例如,从一篇文章中),那么最好有一个名为tags的数组,然后每个标记都有一个名称(和id?)?如果是这样的话,我会在模式中添加如下内容吗?将标签添加到帖子的想法是,我可以在帖子上显示它们(作为链接),并能够在数据库中搜索具有特定标签的所有帖子。这样做对吗

tags: [{
  name: String,
  id: String
}]
当投递到新的投递路线时,我将执行以下操作:

  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 {
      ...
    }
  });
这成功保存了提交的所有其他字段(标题、作者、内容等),但我不确定如何将新创建的标记保存回数据库。这里的任何建议都是非常受欢迎的,因为我对这一点还不熟悉,并且渴望继续学习。谢谢

如果确实希望“标记”数组具有名称字段和生成的
\u 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);

尼尔,谢谢你(接受的)回答。我不知道您可以嵌入另一个架构。它工作得很好,但我必须使用
.replace(/\s/g',)
。等等,您不能用ObjectID代替整个架构吗?