【问题标题】:Storing objects with functions and other objects in mongoDB在 mongoDB 中存储具有函数和其他对象的对象
【发布时间】:2016-05-04 10:59:30
【问题描述】:

您好,我在决定从 node.js 将我的对象存储在 monogoDB 数据库中的正确方法时遇到了麻烦。

我的类的精简示例如下所示,实际上它要复杂得多:

function Object1{
    var variables;
    var object2:
    var object3:

    functions
    ...
}

function Object2{
    var variables;
    var object4;
    var object5;
    ...
    functions
    ...
}

...
etc

Object1 中的典型函数调用会导致对其他对象以及属于这些对象的对象的多次调用。

如果我将 object1 存储在 mongoDB 中,则无法存储函数。根据我的研究,我有两个选择:

  1. 在加载对象时更改对象原型,根据this answer

    问题:然后我会被要求更改每个后续对象的原型,但考虑到大量后续对象,这似乎不是正确的做法,是否有简单的方法来做到这一点?

  2. 使用 mongoose 模式定义对象,允许我使用虚拟对象来存储 this example 中的函数。

    这将导致以下结果:

    var objectSchema = new Schema({
        variables: Type
        object2: Schema.ObjectId
    });
    
    virtual functions
    ...
    

    问题:在这种情况下,每次我想访问变量,或调用其他对象 ID 位于架构中的对象中的虚函数时,我都必须在数据库上调用 find()。与有一个加载对象并将信息轮次传递给后续函数的数据库调用相比,这可能会导致大量的数据库调用,这使得该选项似乎也无效?

问题:有没有比这两种方法更好的方法?

【问题讨论】:

    标签: javascript node.js mongodb model-view-controller mongoose


    【解决方案1】:

    我已经设法解决了我的问题(我认为),方法是从对象中删除函数定义,然后将对象的实例传递给函数。

    object1.js

    module.exports = {
        //Create an object
        Object1: function(params, object2, object3){
                this.variables = params;
                this.object2 = object2:
                this.object3 = object3:
        },
        //object function
        myFunction: function(object1, params){
                do stuff with object1.
        }
    }
    

    然后我在我的代码中使用类似的东西:

    app.js

    var object1 = require('./object1.js');
    var myObject = new object1.Object1();
    
    object1.myFunction(myObject, params);
    

    代替:

    app.js

    var object1 = require('./object1.js');
    var myObject = new object1.Object1();
    
    object1.object1Function(params);
    

    然后可以将 Object1 的实例存储在数据库中,并且可以通过请求模块在整个应用程序中访问这些函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 2021-09-16
      • 2011-08-12
      • 2011-05-15
      • 2022-01-19
      相关资源
      最近更新 更多