由于ID类型,无法对Native MongoDB应用find()方法

时间:2014-06-27 23:36:21

标签: node.js mongodb sails.js mongodb-query node-mongodb-native

我有一个获得结果所需的功能。

当我将1作为_id过滤器时,一切正常。

collectionPersonnel
     .find({ '_id' : 1 })
     .toArray(function (err, personnel) {
     console.log(personnel);  
  });

如果我以另一种方式给过滤器,例如用户[0] [' personnel_id'] - 那就是商店1-那么我只得到[]结果;

collectionPersonnel
     .find({ '_id' : user[0]['personnel_id'] })
     .toArray(function (err, personnel) {
     console.log(personnel);  
  });

然后我尝试了另一种方式。但它不起作用,因为我使用了一个字符串(用户[0] [' personnel_id'])而不是ObjectID。

var ObjectID = require('mongodb').ObjectID; 
var personnelPK_Hex = (user[0]['personnel_id']).toHexString(); 
var personnelPK = ObjectID.createFromHexString(personnelPK_Hex);   

我该怎么办?

修改

我的所有代码都在下面;

module.exports = {

    show: function(req, res) {

        User.native(function(err, collectionUser) {
            if(err) {
                console.log("There is no exist a User by current_id");
            };
            collectionUser
            .find({'_id' : req.param('id')})
            .toArray(function (err, user) {

                Personnel.native(function(err, collectionPersonnel) {
                    if(err) {
                        // handle error getting mongo collection
                        console.log("There is no exist a Personel by current _id");
                    };
                    if(!collectionPersonnel) {
                        console.log("There is no exist a Personel by current _id");
                    };

                    // var ObjectID = require('mongodb').ObjectID; 
                    // var personnelPK_Hex = (user[0]['personnel_id']).toHexString(); 
                    // var personnelPK = ObjectID.createFromHexString(personnelPK_Hex);                  

                    collectionPersonnel
                    .find({ '_id' : user[0].personnel_id })
                    .toArray(function (err, personnel) {

                        console.log(personnel);   
                    });
                });
            });            
        });
    }
};

控制台的输出是; []

解决

就像apsillers的说法一样。我错误地给了收集数字_id。 我修复了_id值,一切正常。

谢谢大家...

2 个答案:

答案 0 :(得分:0)

尝试使用用户[0] .personal_id 代替用户[0] [' personnel_id'] 请提供您的架构设计最好弄明白你究竟缺少什么。

我试过这个

collectionPersonnel
 .find({ '_id' : user[0].personnel_id })
 .toArray(function (err, personnel) {
 console.log(personnel);  
  });

答案 1 :(得分:0)

user[0]['personnel_id']可能是一个字符串。对于Mongo,"1"1不同,这就是您的文字编号1有效的原因,但您的变量(包含字符串)却没有。

相反,请尝试使用一元加号将字符串转换为数字:+user[0]['personnel_id']