0

それほど複雑ではない親子構造を持つマングース スキーマをいくつか構築しました。親を作成するときに、子スキーマに一致する json の配列を含め、子ドキュメントは正常に作成されますが、mongodb の別の子コレクションには表示されません。

ただし、後でさらにいくつかの子を追加すると、これらはmongodbの別の子コレクションに表示され、親に複製/参照があります(ObjectIdにアクセスする必要があるため、Model.createを使用して作成します)

私は 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)
}   
4

1 に答える 1

0

2 番目のコレクションにドキュメントを作成するのは Arrangement.create() 呼び出しです。Tune コレクション内のサブドキュメントの配列だけが必要だと思います。見る:

http://mongoosejs.com/docs/subdocs.html

あなたはただやるべきです:

newTune.arrangements.push({
    abc: 'abc4'
});

newTune.save();
于 2013-02-05T00:18:39.123 に答える