mongoose – 保存数组string

我似乎无法使用Mongoose将数组string保存到我的数据库中。

(注意下面的所有代码都简化了,以方便写在这​​里)

所以我宣布一个人的模式我有一个variables:

var newPerson = new Person ({ tags: req.body.tags }); 

模式本身如下所示:

 var personSchema = new mongoose.Schema({ tags: Array }); 

而当谈到拯救它只是一个简单的:

 newPerson.save(function(err) { //basic return of json }); 

所以使用邮差我发送一个数组在身体 – 然而,每次我检查数据库,它只是显示一个整体数组的条目,即我是如何发送它:

在这里输入图像描述

任何想法什么额外的我应该做的?

写下我的评论:

在mongoose中指定一个string数组的方式是这样的:

 var personSchema = new mongoose.Schema({ tags: [{ type: String }] 

然而,这里的问题最可能与邮差,因为它发送“数组”作为一个string。 你可以通过检查req.body.tags的types来检查, req.body.tags所示:

 console.log(typeof req.body.tags) 

如果返回一个string,请确保将Postman中的内容types设置为JSON,如本屏幕截图所示,而不是默认的“form-data”选项。

尝试将模式更改为

 var personSchema = new mongoose.Schema({ tags: [{type: String}] }); 

或者你可以使用混合types

 var personSchema = new mongoose.Schema({ tags: mongoose.Schema.Types.Mixed }); 

编辑

我认为问题是与分配。 使用:

 person.tags.push("string to push"); 
 var personSchema = new mongoose.Schema({ tags: [{type: String}] }); 

在架构中使用这个。

保存arrays:

 var etc = new modename({yourprimaryid: primaryid}); for (var i = 0; i < tag.length; i++) { etc.tag.push(tag[i]); } etc.save(function(err) { //whatever you want here } 

首先,正如很多人所指出的那样,模式需要改变,以表明tags字段是用来存放一串string的,而不仅仅是一个string。 所以需要改变为:

 var personSchema = new mongoose.Schema({ tags: [String] }); 

另一件事你需要记住(这是我造成了很多麻烦),是保存时,请确保使用一个新的arraystags字段。 例如,这不起作用:

 person.tags[0] = "new tag"; person.save(); 

相反,您需要执行以下操作:

 person.tags = person.tags.slice(); // Clone the tags array person.tags[0] = "new tag"; person.save(); 

希望这可以帮助。