Mongoose - 문자열 배열 저장
다음을 사용하여 문자열 배열을 DB에 저장할 수 없습니다.Mongoose
.
(아래의 모든 코드는 여기에 쓰기 쉽도록 단순화되어 있습니다.
그래서 나는 개인 스키마의 변수를 선언합니다.
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를 확인할 때마다 배열이 전체적으로 포함된 하나의 항목만 표시됩니다. 예를 들어, 어떻게 보냈는지:
제가 뭘 더 해야 하는지 아세요?
내 의견에서 작성:
mongoose에서 문자열 배열을 지정하는 방법은 다음과 같습니다.
var personSchema = new mongoose.Schema({
tags: [{
type: String
}]
그러나 여기서 문제는 'array'를 문자열로 보내는 포스트맨과 관련이 있을 가능성이 높습니다.다음 유형을 확인하여 확인할 수 있습니다.req.body.tags
이와 같이:
console.log(typeof req.body.tags)
String을 반환하는 경우에는 기본 'form-data' 옵션이 아닌 이 스크린샷에 표시된 대로 Postman의 content-type을 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],
required: true
}
});
- 우체부:
{
"tags": ["css", "javascript", "mongoose", "node"]
}
- MongoDB에서
{
"tags":["css", "javascript", "mongoose", "node"]
}
마찬가지로 다음과 같이 mongoose 스키마에서 다른 유형의 원시 배열 및 문서 배열을 만들 수 있습니다.
({
toys: [ToySchema],
buffers: [Buffer],
strings: [String],
numbers: [Number]
// ... etc
});
스키마를 다음으로 변경해 보십시오.
var personSchema = new mongoose.Schema({
tags: [{type: String}]
});
또는 혼합 유형을 사용할 수 있습니다.
var personSchema = new mongoose.Schema({
tags: mongoose.Schema.Types.Mixed
});
편집
저는 과제가 문제라고 생각합니다.사용:
person.tags.push("string to push");
스키마에
techs: Array
온 포스트맨
"techs": ["express","rect","html","css","scss"]
On DB(MongoDB)
"techs" : [ "epxress", "rect", "html", "css", "scss" ]
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
}
스키마 정의:
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], default: []
}
});
이와 유사한 문제가 있었습니다. 모델에서 다음과 같이 하십시오.
tags : {[String], default: undefined}
기본적으로 빈 배열 대신 정의되지 않은 배열로 설정됩니다.
const person = new Person({
tags : req.body.tags
});
수행:
const person = new Person();
person.tags = req.body.tags;
내 요구 사항; 성분:문자열 배열 형식
솔루션:
ingredients: {
type: [String],
},
첫째, 많은 사람들이 지적했듯이, 스키마는 다음을 나타내기 위해 변경될 필요가 있습니다.tags
필드는 문자열 배열을 유지하기 위한 것으로, 단일 문자열만이 아닙니다.따라서 다음과 같이 변경해야 합니다.
var personSchema = new mongoose.Schema({
tags: [String]
});
기억해야 할 또 다른 사항은 저장할 때 새로운 어레이를 사용해야 한다는 것입니다.tags
필드. 예를 들어, 다음과 같이 사용할 수 없습니다.
person.tags[0] = "new tag";
person.save();
대신 다음과 같은 작업을 수행해야 합니다.
person.tags = person.tags.slice(); // Clone the tags array
person.tags[0] = "new tag";
person.save();
이게 도움이 되길 바랍니다.
const productSchema = new mongoose.Schema(
{
name: {
type: String,
},
description: {
type: String,
},
price: {
type: String,
},
categoryId: {
type: mongoose.Schema.Types.ObjectId,
ref: "Category",
},
sellerId: {
type: mongoose.Schema.Types.ObjectId,
ref: "Seller",
},
discount: {
type: String,
},
status: {
type: String,
default: "active",
enum: ["active", "inactive", "deleted"],
},
images: {
type: Array,
required: true,
},
},
{ timestamps: true }
);
언급URL : https://stackoverflow.com/questions/35509611/mongoose-save-array-of-strings
'source' 카테고리의 다른 글
문자열 컬렉션을 목록으로 변환 (0) | 2023.05.20 |
---|---|
Angular2에서 괄호, 괄호 및 별표의 차이점은 무엇입니까? (0) | 2023.05.20 |
현재 git 브랜치의 이름을 셸 스크립트의 변수로 가져오는 방법은 무엇입니까? (0) | 2023.05.15 |
sudo service mongodb restart는 Ubuntu 14.0.4에서 "비활성화된 서비스 오류"를 제공합니다. (0) | 2023.05.15 |
require를 통해 호출되는지 아니면 명령줄을 통해 직접 호출되는지 탐지 (0) | 2023.05.15 |