我已经构建了一些具有不太复杂的父子结构的猫鼬模式。当我创建我的父母时,我包含了一个与子模式匹配的 json 数组,并且子文档可以正常创建,但不会出现在 mongodb 的单独子集合中。
但是,如果我稍后添加更多的孩子,那么这些确实会出现在 mongodb 中的单独子集合中,并且在父集合中有重复/引用(我使用 Model.create 创建它们,因为我需要访问它们的 ObjectId)
由于我是 NoSQL 的新手,我不确定是否仍应尝试保留子文档的单独集合。只有我的一些孩子出现在单独的收藏中是否有任何负面影响?
最少的示例代码
var mongoose = require('mongoose'),
arrangementSchema = mongoose.Schema({
abc: String
}),
tuneSchema = mongoose.Schema({
name: String,
arrangements: [arrangementSchema]
});
mongoose.connect('mongodb://localhost/jnr_dev');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
});
var Arrangement = mongoose.model('Arr', arrangementSchema),
Tune = mongoose.model('Tu', tuneSchema);
var tune = Tune.create({
name: 'test'
}, function (err, newTune) {
newTune.arrangements = [{abc:'abc1'}];
newTune.save(function () {
Arrangement.create({
abc: 'abc2'
}, function (err, arr) {
newTune.arrangements.push(arr);
newTune.save();
});
})
});
// and same behaviour with
var tune = Tune.create({
name: 'test',
arrangements: [{abc:'abc3'}]
}, function (err, newTune) {
Arrangement.create({
abc: 'abc4'
}, function (err, arr) {
newTune.arrangements.push(arr);
newTune.save();
});
});
Tus 集合中的结果
{ "__v": NumberInt(2), "_id": ObjectId("511037ef60e5af0000000002"), "arrangements": {
"0": {
"abc": "abc1",
"_id": ObjectId("511037ef60e5af0000000003")
},
"1": {
"_id": ObjectId("511037ef60e5af0000000004"),
"abc": "abc2"
} }, "name": "test" }
结果在 Arrs 集合中
{
"abc": "abc2",
"_id": ObjectId("511037ef60e5af0000000004"),
"__v": NumberInt(0)
}