均值:查询相关集合给出 'findOne' of undefined

Mean: Query related collections gives 'findOne' of undefined

我是 MEAN 的新手,我有 两个集合用户和仪表板。我有 相关 用户仪表板

Mongo shell

db.users.find() -> { "_id" : ObjectId("573765e5889380a83581f421"), "firstName" : "zx", "lastName" : "zx", "username" : "zx" }

db.dashboard.find() -> { "_id" : ObjectId("573766af2affdfa8aaef44d4"), "sentenceId" : 40, "synced" : 1, "iscorrect" : "no", "user_id" : ObjectId("573765e5889380a83581f421") }

我们可以观察到用户与仪表板相关

db.dashboard.findOne({"user_id" : ObjectId("573765e5889380a83581f421")})

得到的结果是

{ "_id" : ObjectId("573766af2affdfa8aaef44d4"), "sentenceId" : 40, "synced" : 1, "iscorrect" : "no", "user_id" : ObjectId("573765e5889380a83581f421") }

问题从这里开始

我尝试在 express js 中做如下操作

function getById(_id) {
    var deferred = Q.defer();

    db.dashboard.findOne({user_id : _id}, function (err, user) {
        console.log(user)

        if (err) deferred.reject(err);

        if (user) {
            // return user (without hashed password)
            deferred.resolve(_.omit(user, 'hash'));
        } else {
            // user not found
            deferred.resolve();
        }
    });

    return deferred.promise;
}

错误信息TypeError: Cannot read property 'findOne' of undefined

我正在使用 mongoskin 并且我不确定 如何在 express

中实施 db.dashboard.findOne

也可以提出任何更好的方法,感谢任何帮助

提前致谢

您引用 dashboard 集合的方式似乎有误。

您可以将数据库实例绑定到集合或使用 collection 方法。

db.bind:

function getById(_id) {
    var deferred = Q.defer();

    db.bind('dashboard');
    db.dashboard.findOne({user_id : _id}, function (err, user) {
        console.log(user)

        if (err) deferred.reject(err);

        if (user) {
            // return user (without hashed password)
            deferred.resolve(_.omit(user, 'hash'));
        } else {
            // user not found
            deferred.resolve();
        }
    });

    return deferred.promise;
}

db.collection:

function getById(_id) {
    var deferred = Q.defer();

    var dashboard = db.collection('dashboard');
    dashboard.findOne({user_id : _id}, function (err, user) {
        console.log(user)

        if (err) deferred.reject(err);

        if (user) {
            // return user (without hashed password)
            deferred.resolve(_.omit(user, 'hash'));
        } else {
            // user not found
            deferred.resolve();
        }
    });

    return deferred.promise;
}