簡體   English   中英

使用Mongoose將數組('tags')保存到MongoDB

[英]Saving an array (of 'tags') to MongoDB using Mongoose

我正在玩Mongoose而且我在保存到陣列時遇到了麻煩。 例如,我在頁面上有一個逗號分隔標簽的輸入字段。 我從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 {
      ...
    }
  });

這成功保存了提交的所有其他字段(標題,作者,內容等),但我不確定如何將新創建的標記保存回數據庫。 這里的任何建議都會非常受歡迎,因為我是新手,並熱衷於繼續學習。 謝謝!

如果你真的希望你的“標簽”數組有一個名稱字段和一個生成的_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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM