我想知道解决当前情况的最佳方法。 我有一个使用猫鼬和蓝鸟的节点API。一些Android客户将发布"运动"它的实体。
(最后的问题)。
让我们说movement-model.js
导出Schema,看起来像这样:
"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
保存动作集合,因为完整的派对文档是在保存时,我的意思是一份包含Party文档副本的嵌入式文档,不受未来对Party文档所做更新的影响。
虽然我无法更改Android客户端,但我仍然只能从中获取ObjectId
。
Android客户端将发布的JSON示例:{"movementId":1, "relMovementId":4138, "_party":"58dbfe26194cfc5a9ec9b7c5"}
我现在感到困惑,并且不确定是否由于Android发布JSON的方式,我需要两个模式;一个用于接收的对象(即:使用ObjectId和ref为Party),第二个用于持久化对象(即:使用模式引用_party: Party.Schema
)或者我可以做一些更简单的事情populate
在保存之前...或者什么。
答案 0 :(得分:0)
为了解决这个问题: 在编写问题时,我已经实现了我想到的一种方法。移动架构已更改为:_party:Party.Schema 当我获得POST以创建新的移动时,我会执行getById并使用该exec的结果将该值填充为嵌入式文档。