Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Query Parse.com迁移了与Mongoose的数据库指针关系 上下文_Node.js_Parse Platform_Mongoose - Fatal编程技术网

Node.js Query Parse.com迁移了与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

因此,我们已经从Parse.com迁移到托管的MongoDB数据库。现在,我必须编写一个脚本,直接查询数据库(而不是使用Parse)

我正在使用nodejs/mongoose并能够检索这些文档

问题

以下是我目前的模式:

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;