当前位置: 首页 > 知识库问答 >
问题:

Mongoose-保存字符串数组

韩豪
2023-03-14

我不能使用Mongoose将字符串数组保存到我的数据库中。

(请注意,为了便于编写,下面的所有代码都被简化了)

因此,我声明了person模式的一个变量:

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

模式本身看起来像:

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

说到储蓄,它只是一个简单的问题:

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

所以使用邮递员,我在体内发送一个数组-然而每次我检查数据库,它只是显示一个条目与数组作为一个整体,即我如何发送它:

你知道我应该多做些什么吗?

共有3个答案

呼延卓
2023-03-14

尝试将模式更改为

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

或者你可以使用混合类型

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

编辑

我认为问题在于作业。使用:

person.tags.push("string to push");
寇丰
2023-03-14
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);
齐奕
2023-03-14

从我的评论中写出来:

在mongoose中指定字符串数组的方法如下:

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

然而,这里的问题很可能与Postman有关,因为它将“数组”作为字符串发送。您可以通过检查req的类型来检查这一点。身体标签类似于:

console.log(typeof req.body.tags)

如果返回字符串,请确保将Postman中的内容类型设置为JSON,如本屏幕截图所示,而不是默认的“表单数据”选项。

 类似资料:
  • 在我的模式文件中,我试图将类型属性设置为数组。正如这里所见 尽管出于某种原因,当我试图保存文档时,它会将文档保存为字符串,即使它是数组中的元素,它仍会返回字符串。这是我保存文档的代码; 这是在网站中查看的猫鼬模式https://i.stack.imgur.com/TACoo.png 我在mongoose方面不是最棒的,但是,我确信有些事情发生了,但是我没有将文档保存到任何其他地方,而是仍然保存一个

  • 问题内容: 我有ObjectId的字符串。 我如何使用它: 创建“评论”模型并分配字符串user_id值或发布时,保存时出现错误。我将所有数据分配给vars。 我尝试: TypeError:对象函数ObjectID(id){ TypeError:无法调用未定义的方法“ ObjectId” TypeError:无法读取未定义的属性“ ObjectId” 当然, 在所有通话之前* ,我还包括了猫鼬 *

  • Java MySQL数据库我正在做一个项目,将一个路径名为“C:\Desktop\”的字符串保存到数据库中。我已经创建了一个实体类来将此路径名更新到数据库中,在javaeclipse中,当我运行程序时,它会显示路径以这种格式存储在数据库中,即“C:\Desktop\”,但在该路径的数据库列中,它只存储“C:Desktop”,没有“\”

  • 我正在学习SQL,我试图在表中保存用户感兴趣的标记列表(通常是字符串),最好的方法是什么?是否应将所有标记保存为新表中的主键?他们是否应该有他们的on主键,而我需要比较标记,看看它是否已经存在?我完全不知道什么是最好的解决办法。 应该类似于:

  • 我有一个对象,它的父类可以设置_id字段,也可以不设置。 在这种情况下,没有设置_id字段,我将一个对象传递给 收集insertOne(对象) 通常情况下,mongo会为未指定的_id生成一个ObjectId(),但由于某种原因,每当_id由父类指定且未设置时,它会生成一个id,bug会将id保存为数据库中的字符串,而不是ObjectId。 我所经历的 {“name”:“name”} 预期: {“

  • 我有一个mongoose对象模式,看起来类似于以下内容: 我试图创建一个新的职位使用以下内容: 但是,一旦我保存了文章,它就会被创建为带有images属性的空数组。我做错了什么?