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();
希望这可以帮助。