1

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

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

然后我想通过以下代码查询node.jsmongoose

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");

但它什么也没给我

我的代码有什么问题?怎样才能得到正确的查询结果?

4

4 回答 4

6

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

要覆盖默认值并与现有co集合对齐:

var Co = mongoose.model('Co', coSchema, 'co');
于 2012-12-22T13:58:14.953 回答
2

在任何 CURD 操作期间,Mongoose 都会将您的模型名称复数,使用此并检查:

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);
于 2013-01-03T05:50:53.203 回答
1

.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);
});
于 2012-12-22T13:24:34.987 回答
1

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

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

或使用 findOne()

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

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

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

于 2012-12-24T13:24:38.867 回答