首先抱歉我可怕的英语。
在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',值:[])
答案 0 :(得分:1)
我解决了。
关键是我注册了mongoose插件。
注册mongoose模型后,无法使用新注册的插件切换相同型号。
答案 1 :(得分:0)
这是很奇怪的,但是如果您先对其进行JSON.stringify然后再进行JSON.parse,则可以将其视为普通对象。老实说,这似乎是一种更快的解决方法,尽管有点愚蠢。