Javascript 能否在nodejs控制器的变量中使用mongodb表名?

Javascript 能否在nodejs控制器的变量中使用mongodb表名?,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,假设我得到了一个名为“bookings”的mongodb表,另一个名为“users”等 是否可以使用变量/parm作为表名来调用函数? 像这样: let myData = getRecord("bookings", "ABCDE") let myData = getRecord("users", "Torben") 以下是我对代码的建议 var mongoose = require('mongoose'); var getRecord = (tableName, recordID) =&g

假设我得到了一个名为“bookings”的mongodb表,另一个名为“users”等

是否可以使用变量/parm作为表名来调用函数? 像这样:

let myData = getRecord("bookings", "ABCDE")
let myData = getRecord("users", "Torben")
以下是我对代码的建议

var mongoose  = require('mongoose');

var getRecord = (tableName, recordID) => {
    return new Promise((resolve, reject) => {
    tableName.findOne (
        { "_id":  recordID }
    ,function(err, data) {
        if (err) {
            return reject(new Error('getRecord ERROR : ' + err));
        }
        if (!data) {
            return reject(new Error('Record Not Found!'));
        }
        return resolve(data);
    })
})};

let myData = getRecord("bookings", "ABCDE")

不是那样的。但您可以将创建的模式分配给对象的属性,然后使用变量名查找这些属性。例如:

tables = {
    bookings: new Schema({ ... }),
    users: new Schema({ ... })
};
然后在您的功能中,您只需执行以下操作:

 tables[tableName].findOne(...)

不是那样的。但您可以将创建的模式分配给对象的属性,然后使用变量名查找这些属性。例如:

tables = {
    bookings: new Schema({ ... }),
    users: new Schema({ ... })
};
然后在函数中,您只需执行以下操作:

 tables[tableName].findOne(...)

通常,您在mongoose中定义模式,因此您可能在某个地方这样定义它:

var Bookings = mongoose.model('Bookings', bookingSchema);
现在,您可以使用类作为参数而不是字符串来调用代码:

let myData = getRecord(Bookings, "ABCDE")
您的
getRecord
函数应该与您的代码一起工作

为什么使用变量/类而不是字符串更好?
直接使用变量时,如果在变量名称中出错,IDE将显示错误,如果只是传递字符串并在其中键入错误,则不会发生错误。

通常在mongoose中定义架构,因此您可能在类似的地方定义了它:

var Bookings = mongoose.model('Bookings', bookingSchema);
现在,您可以使用类作为参数而不是字符串来调用代码:

let myData = getRecord(Bookings, "ABCDE")
您的
getRecord
函数应该与您的代码一起工作

为什么使用变量/类而不是字符串更好?
直接使用变量时,如果您在变量名称中出错,IDE将显示一个错误,如果您只是传递一个字符串并在其中键入错误,则不会发生错误。

虽然这样做有效,但OP可能希望使用字符串还有其他原因,例如能够动态生成表名以供选择。在这些情况下,像这样简单地传递一个硬编码的变量引用是行不通的。虽然这样做有效,但OP可能希望使用字符串还有其他原因,例如能够动态生成表名以供选择。在这种情况下,像这样简单地传递一个硬编码的变量引用是行不通的,没问题。请注意,如果您不需要动态生成或操作这些名称,最好使用@Dimitri L.的方法。如果可以的话,传递变量引用总是比传递字符串好。没问题。请注意,如果您不需要动态生成或操作这些名称,最好使用@Dimitri L.的方法。如果可以,最好传递变量引用而不是字符串。