1

私のmongoDBにコレクションがあり、db.co ドキュメントが1つしかないとします。

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

次に、次のコードを使用node.jsしてクエリを実行します。mongoose

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操作中にモデル名を複数形にします。これを使用して、次のことを確認してください。

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()へのコールバックに次のパラメータがあることに気付きました:err、doc

find()は常に配列を返すので、これを本当に必要とします:err、docs

またはfindOne()を使用します

投稿したコードでは非同期のものは問題にならないはずです。ネストされたコールバックは引き続き実行されます。接続に問題はありませんか。私はオープンクエリを実行します:

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

コレクションに何かが含まれていることを確認するだけです

于 2012-12-24T13:24:38.867 に答える
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 に答える