source

Mongoose - 문자열 배열 저장

manysource 2023. 5. 15. 22:22

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);
  1. 스키마:
    (당신이 문제에서 문자열 배열이라고 언급했기 때문에)
var personSchema = new mongoose.Schema({
  tags:{
     type:[String],
     required: true
  }
}); 
  1. 우체부:
{
  "tags": ["css", "javascript", "mongoose", "node"]
}
  1. 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");
  1. 스키마에

    techs: Array

  2. 온 포스트맨

    "techs": ["express","rect","html","css","scss"]

  3. 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