繁体   English   中英

无法在node.js中用猫鼬查询mongoDB

[英]Can't query mongoDB with mongoose in node.js

假设我的mongoDB: db.co有一个集合,并且只有一个文档:

{ "_id" : ObjectId("50d083e32cdcf7ce065b616c"), 
  "age" : 22, 
  "friends" : [ "Tom"], 
  "location" : "NY", 
  "name" : "lee", 
  "skill" : [ "javascript", "java" ] 
 }

然后我想通过以下代码在mongoose node.js查询它:

var coSchema = mongoose.Schema( {
    age: Number,
    friends: Array, 
    location: String,
    name: String,
    skill: Array
})

var Co = mongoose.model('Co', coSchema);
function findSomeoneInCo (name) {
  Co.find({"name": name}, function (err, doc) {
    if (err) {
        console.log('find some one failed: ' + err);
        return;
    }
    console.log('find successed: ' + doc);
  })
}

findSomeoneInCo("lee");

却什么也没给我

我的代码有什么问题? 如何获得正确的查询结果?

在确定要使用的集合名称时,猫鼬将小写的模型名称复数。 因此,如果模型名称为'Co'则默认情况下它将在cos集合中查找。

要覆盖默认值并与您现有的co收藏保持一致,请执行以下操作:

var Co = mongoose.model('Co', coSchema, 'co');

猫鼬在任何CURD操作期间都会使您的型号名称复数,请使用此&检查:

var Co = mongoose.model('Co', coSchema, 'co'); //Even the case matters

要么

var coSchema = new Schema({
    age: Number,
    friends: Array, 
    location: String,
    name: String,
    skill: Array
}, {collection:'co'});
var Co = mongoose.model('Co',coSchema);

.find()是异步工作的,这意味着它的回调在您的函数已经拥有时运行。

参见异步函数中的变量范围

//try passing a callback function to your search function, like:
function findSomeoneInCo (name, callback) {

  //happens now - here you could still return something

  Co.find({"name": name}, function (err, doc) {

   //happens later - too late to return stuff, function has ran already

    if (err) {
        callback(err);
        return;
    }
    callback(doc);
  })
}


//call your function passing a callback function
findSomeoneInCo("lee", function(doc){
  console.log('do something with your results: ' + doc);
});

我注意到您的find()回调具有以下参数:err,doc

find()总是返回一个数组,所以您真的希望这样:err,docs

或使用findOne()

异步的东西在您发布的代码中应该不是问题,嵌套的回调仍将执行。 您确定连接正常吗? 我会运行一个开放式查询:

Co.find({}, function(err, docs){
 console.log(docs);
}

只是为了检查集合中是否有东西

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM