在mongoDB

时间:2016-01-27 13:07:29

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

您好我在从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
    ...
    

    问题:在这种情况下,每次我想访问变量,或者在ObjectId在模式中的其他对象中调用虚函数时,我都必须在数据库上调用find()。与一个加载对象并将信息传递给后续函数的数据库调用相比,这可能会导致大量数据库调用,这使得此选项看起来也无效?

  3. 问题:有比这两种方法更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我设法通过从对象中删除函数定义然后将对象的实例传递给函数来解决我的问题(我认为)。

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的实例存储在数据库中,并且可以通过要求模块在整个应用程序中访问这些函数。