Node.js Query Parse.com迁移了与Mongoose的数据库指针关系 上下文
因此,我们已经从Parse.com迁移到托管的MongoDB数据库。现在,我必须编写一个脚本,直接查询数据库(而不是使用Parse) 我正在使用nodejs/mongoose并能够检索这些文档 问题 以下是我目前的模式:Node.js Query Parse.com迁移了与Mongoose的数据库指针关系 上下文,node.js,parse-platform,mongoose,Node.js,Parse Platform,Mongoose,因此,我们已经从Parse.com迁移到托管的MongoDB数据库。现在,我必须编写一个脚本,直接查询数据库(而不是使用Parse) 我正在使用nodejs/mongoose并能够检索这些文档 问题 以下是我目前的模式: var StorySchema = new mongoose.Schema({ _id: String, genre: String }); var ActivitySchema = new mongoose.Schema({ _id: String, ac
var StorySchema = new mongoose.Schema({
_id: String,
genre: String
});
var ActivitySchema = new mongoose.Schema({
_id: String,
action: String,
_p_story: String /* Also tried: { type: mongoose.Schema.Types.ObjectId, ref: 'Story' } and { type: String, ref: 'Story' }*/,
});
我想写一个查询,获取这些文档和相关的故事(存储为指针)
问题:
考虑到\u p_story
字段在对象id之前包含story$
,是否有办法让获取的活动填充它们的故事
谢谢 我一直在考虑的一个选项是为每个指针创建自定义数据类型的能力。不幸的是,Parse将这些关系视为“belongsTo”关系,但没有存储Mongoose希望用于
populate()
的“hasMany”关系。但是,一旦这一切就绪,您就可以轻松地执行循环以获取关系数据。这并不理想,但很有效,这正是populate在引擎盖下真正做的事情
PointerTypeClass.js->这将适用于填充相反方向的对象
var Pointer = function(mongoose) {
function PointerId(key, options) {
mongoose.SchemaType.call(this, key, options, 'PointerId');
}
PointerId.prototype = Object.create(mongoose.SchemaType.prototype);
PointerId.prototype.cast = function(val) {
return 'Pointer$' + val;
}
return PointerId;
}
module.exports = Pointer;
另外,通过执行mongoose.Schema.Types.PointerId=require('../Types/PointerTypeClass')(mongoose),确保mongoose了解新类型代码>
最后。如果您愿意编写一些cloudcode,您可以创建ID数组,以便您的用户了解对象。基本上,在Object.beforeSave中,您将更新关系的id数组。希望这有帮助。只是评论,但您可以运行自己的解析服务器,而不是重写所有查询。示例应用程序简化了“解析服务器示例应用程序”一节。我一直希望做同样的事情来绕过一些限制。你能做到吗?
var Pointer = function(mongoose) {
function PointerId(key, options) {
mongoose.SchemaType.call(this, key, options, 'PointerId');
}
PointerId.prototype = Object.create(mongoose.SchemaType.prototype);
PointerId.prototype.cast = function(val) {
return 'Pointer$' + val;
}
return PointerId;
}
module.exports = Pointer;