Mongoose
を使用して文字列の配列をDBに保存できません。
(以下のすべてのコードは、ここでの記述を簡単にするために簡略化されています)
だから私は持っている個人スキーマの変数を宣言します:
var newPerson = new Person ({
tags: req.body.tags
});
スキーマ自体は次のようになります。
var personSchema = new mongoose.Schema({
tags: Array
});
そして、その単純な保存に関しては:
newPerson.save(function(err) {
//basic return of json
});
したがって、Postmanを使用して、本文の配列を送信します-ただし、DBをチェックするたびに、配列全体で1つのエントリが表示されます(送信方法)。
私は何をすることになっていますか?
私のコメントから書きます:
Mongooseで文字列の配列を指定する方法は次のとおりです。
var personSchema = new mongoose.Schema({
tags: [{
type: String
}]
ただし、ここでの問題は、「配列」を文字列として送信しているため、Postmanで行う可能性が最も高いです。これを確認するには、次のようにreq.body.tags
のタイプを確認します。
console.log(typeof req.body.tags)
これが文字列を返す場合、Postmanのcontent-typeを、デフォルトの 'form-data'オプションではなく this スクリーンショットで見られるようにJSONに設定してください。
var schema = new Schema({
name: String,
binary: Buffer,
living: Boolean,
updated: { type: Date, default: Date.now },
age: { type: Number, min: 18, max: 65 },
mixed: Schema.Types.Mixed,
_someId: Schema.Types.ObjectId,
decimal: Schema.Types.Decimal128,
array: [],
ofString: [String],
ofNumber: [Number],
ofDates: [Date],
ofBuffer: [Buffer],
ofBoolean: [Boolean],
ofMixed: [Schema.Types.Mixed],
ofObjectId: [Schema.Types.ObjectId],
ofArrays: [[]],
ofArrayOfNumbers: [[Number]],
nested: {
stuff: { type: String, lowercase: true, trim: true }
},
map: Map,
mapOfString: {
type: Map,
of: String
}
})
// example use
var Thing = mongoose.model('Thing', schema);
var m = new Thing;
m.name = 'Statue of Liberty';
m.age = 125;
m.updated = new Date;
m.binary = Buffer.alloc(0);
m.living = false;
m.mixed = { any: { thing: 'i want' } };
m.markModified('mixed');
m._someId = new mongoose.Types.ObjectId;
m.array.Push(1);
m.ofString.Push("strings!");
m.ofNumber.unshift(1,2,3,4);
m.ofDates.addToSet(new Date);
m.ofBuffer.pop();
m.ofMixed = [1, [], 'three', { four: 5 }];
m.nested.stuff = 'good';
m.map = new Map([['key', 'value']]);
m.save(callback);
スキーマを変更してみてください
var personSchema = new mongoose.Schema({
tags: [{type: String}]
});
または、混合タイプを使用できます
var personSchema = new mongoose.Schema({
tags: mongoose.Schema.Types.Mixed
});
[〜#〜] edit [〜#〜]
問題は割り当てにあると思います。つかいます:
person.tags.Push("string to Push");
まず、多くの人が指摘しているように、スキーマを変更して、tags
フィールドが単一の配列ではなく、文字列の配列を保持することを示す必要があります。そのため、次のように変更する必要があります。
var personSchema = new mongoose.Schema({
tags: [String]
});
あなたが心に留めておく必要がある他のこと(そして、それは私に多くのトラブルを引き起こしました)、保存するとき、tags
フィールドのために必ず新しい配列を使用することです。たとえば、次のwontは機能します。
person.tags[0] = "new tag";
person.save();
代わりに、次のようなことをする必要があります。
person.tags = person.tags.slice(); // Clone the tags array
person.tags[0] = "new tag";
person.save();
お役に立てれば。
スキーマを定義します。
const schema = new Schema({
name: { type: String, required: true },
tags: [String]
});
以下の配列構文を使用して、郵便配達員で各要素を個別に追加します
name:Thing
tags[]:task
tags[]:other
tags[]:thing
戻りデータ:
{
"__v": 0,
"name": "Thing",
"_id": "5a96e8d0c7b7d1323c677b33",
"tags": [
"task",
"other",
"thing"
]
}
var personSchema = new mongoose.Schema({
tags: [{type: String}]
});
これをスキーマで使用します。
配列の保存:
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
}
スキーマについて
techs: Array
郵便配達員について
"techs": ["express","rect","html","css","scss"]
DB(MongoDB)で
"techs" : [ "epxress", "rect", "html", "css", "scss" ]