javascript-使用Mongoose将数组(“标签”)保存到MongoDB

我在玩猫鼬,在保存到阵列时遇到了麻烦.例如,我在页面上有一个输入字段,以逗号分隔的标签.我从req.body.tags中抓取这些标签,删除空白,然后用逗号将它们分开,以获得标签的数组.现在,如何将该数组保存回数据库?我猜我在架构的这一部分设置了错误,但是老实说,我不确定什么是正确的.到目前为止,我拥有的架构是:

var postSchema = mongoose.Schema({
  title: String,
  permalink: String,
  content: String,
  author: {
    id: String,
    name: String,
  },
  postDate: {
    type: Date,
    default: Date.now
  },
});

如果要保存标签(例如,从帖子中保存),最好有一个名为标签的数组,然后每个标签都有一个名称(和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 {
      ...
    }
  });

这样可以成功保存提交的所有其他字段(标题,作者,内容等),但是我不确定如何将新创建的标签保存回数据库.由于我是新来的并且热衷于继续学习,因此在这里提供任何建议都将非常受欢迎.谢谢!

解决方法:

如果您确实希望您的“标签”数组具有名称字段和生成的_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);
上一篇:mongo操作数据库


下一篇:javascript-Express / Mongoose路由器:对于路径“ _id”的值“ undefined”,未能成功转换到ObjectId