現在のシナリオを解決するための最良の方法を知りたいと思います。 私はmongooseとbluebirdを使用するノードAPIを持っています。また、Androidクライアントの中には、「ムーブメント」エンティティを投稿するものがあります。Node Mongoose - mongoIdを受け取ったAPIに埋め込み文書を保存する
(最後の質問)
のはmovement-model.js
は、スキーマをエクスポートし、そして次のようになりましょう:次のように
"use strict";
const mongoose = require('mongoose');
const _movementSchema = {
movementId: { type: Number, requried: true },
relMovementId: Number,
_party: { type: mongoose.Schema.Types.ObjectId, required: true, ref: 'Party' }
}
module.exports = mongoose.Schema(_movementSchema, {collection: 'movement'});
そしてparty-model.js
にエクスポートしたスキーマの関連は次のとおりです。
"use strict";
const mongoose = require('mongoose');
const _partySchema = {
active: { type: Boolean, default: true },
name: { type: String, trim: true, required: true },
logo: { type: Buffer },
coordenates: { lat: Number, long: Number },
startOn: { type: Date, required: true },
endOn: { type: Date, required: true }
}
module.exports = mongoose.Schema(_partySchema, {collection: 'party'});
AndroidのクライアントがのObjectIdでJSONを送信しないだろう完全に取り込まれたオブジェクト。だから、POSTが来るとき、私は(すなわち:let _movement = req.body;
)それを直接使用していますし、movement-dao.js
に私はcreateNew
メソッドを持っていると私はモデルを輸出している:
"use strict";
const mongoose = require('mongoose');
const Promise = require('bluebird');
mongoose.Promise = Promise;
const movementSchema = require('../model/movement-model');
movementSchema.statics.createNew = (movement) => {
return new Promise((resolve, reject) => {
if (!_.isObject(movement)) {
return reject(new TypeError('Movement is not a valid object.'));
}
let _something = new Movement(movement);
_something.save((err, saved) => {
err ? reject(err)
: resolve(saved);
});
});
}
const Movement = mongoose.model('Movement', movementSchema);
module.exports = Movement;
私が達成したい何にあります:完全なパーティー文書が保存の瞬間であるので、_party
のムーブメントコレクションを保存します。これは、パーティー文書のコピーの埋め込み文書を意味します。これは、将来パーティ文書に行われた更新の影響を受けません。
私はAndroidクライアントを変更することはできませんが、私はまだそれからObjectId
しか得られません。
JSON例:{"movementId":1, "relMovementId":4138, "_party":"58dbfe26194cfc5a9ec9b7c5"}
私は道にAndroidはJSONを掲示されたため、私は2つのスキーマが必要な場合は、必ず今混乱している、とではありません。 (ObjectIdとref to Partyで)、オブジェクトの2番目のオブジェクトが永続化されている(つまり、スキーマが_party: Party.Schema
と表示されている)場合、または保存する前にpopulate
というより簡単なことができるかどうか。