我想知道解決當前場景的最佳方法。 我有一個使用貓鼬和藍鳥的節點API。一些Android客戶端會發布「移動」實體。節點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,我需要兩個模式;一個用於接收對象(即:用ObjectId並引用Party),另一個用於對象持久化(即:模式引用爲_party: Party.Schema
),或者如果我可以在保存之前做一些簡單的populate
...或者。