mongoose schema动态添加新字段,但未定义错误?

时间:2017-03-28 06:36:23

标签: mongodb mongoose

首先抱歉我可怕的英语。

在Node.js中,我使用mongoose使用mongodb。

const TestASchema = new mongoose.Schema({
  name: {
    type: String
  }
});
TestA = mongoose.model('TestA', TestASchema);
const TestBSchema = new mongoose.Schema({
  name: {
    type: String
  }
});
TestB = mongoose.model('TestB', TestBSchema);

在测试代码中,

mongoose.model('TestA').schema.add({
  abc: {
    type: String,
    default: ''
  }
});
TestA = mongoose.model('TestA');

_testA = {
  name: 'TESTA'
};
testA = new TestA(_testA);

_testB = {
  name: 'TESTB'
};
testB = new TestB(_testB);
testA
.save()
.then(() => testB.save())
.then(() => done())
.catch(chainError => done(chainError));

然后,

const testB2 = new TestB({ name: 'TESTB2' });
const testB3 = new TestB({ name: 'TESTB3' });
testB2
.save()
.then(() => testB3.save())
.then(() => {
  //testA.update({ $pushAll: { values: [testB2, testB3] } });
  testA.set('abc', 'asdfasdf');
  testA
  .save()
  .then((savedTestA) => {
    console.log(savedTestA);
    done();
  });
});

效果很好。和控制台日志是

{ __v: 0,
  name: 'TESTA',
  abc: 'asdfasdf',
  testbsa: [],
  _id: 58d9fd904ae344082c38ccf2 }

问题是为什么我无法使用testA.abc访问testA.set(' abc',' ...')?

如果我使用testA.abc设置,则不会发生。另外,console.log(testA.abc)未定义。

abc字段只是我的测试,真实字段是testbsa。它的数组很难用set函数设置值。

1)如何使用dot访问? ex)testA.abc 2)如果Q1不可能,我怎样才能推动某种值的设定值? ex)testA.set(' testbsa',值:[])

2 个答案:

答案 0 :(得分:1)

我解决了。

关键是我注册了mongoose插件。

注册mongoose模型后,无法使用新注册的插件切换相同型号。

答案 1 :(得分:0)

这是很奇怪的,但是如果您先对其进行JSON.stringify然后再进行JSON.parse,则可以将其视为普通对象。老实说,这似乎是一种更快的解决方法,尽管有点愚蠢。