2017-04-17 7 views
0

現在のシナリオを解決するための最良の方法を知りたいと思います。 私は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しか得られません。

のAndroidクライアントは、掲載する予定何の

JSON例:{"movementId":1, "relMovementId":4138, "_party":"58dbfe26194cfc5a9ec9b7c5"}

私は道にAndroidはJSONを掲示されたため、私は2つのスキーマが必要な場合は、必ず今混乱している、とではありません。 (ObjectIdとref to Partyで)、オブジェクトの2番目のオブジェクトが永続化されている(つまり、スキーマが_party: Party.Schemaと表示されている)場合、または保存する前にpopulateというより簡単なことができるかどうか。

答えて

0

これを閉じるために: 質問を書く際に私が気づいたアプローチの1つを実装しました。移動スキーマが次のように変更されました:_party:Party.Schema 新しい移動を作成するPOSTが取得されたら、getByIdを実行し、そのexecの結果を使用して埋め込みドキュメントとして値を入力します。

関連する問題