0

なぜ機能しないのかわかりません(( val.instruments は未定義です。

function getInstruments(callback) {
    db.collection("settings", function(error, settings) {
        settings.find({ "settings" : "settings" }, function (err, val) {
            console.log('from getInstruments ' + val.instruments);
            if (val.instruments==undefined) {
                callback("");
            } else {
                callback(val.instruments);
            }
        });
    });
}

図式:

{
    "_id": {
        "$oid": "508677a3e5089a6df291631a"
    },
    "settings": "settings",
    "instruments": [
        "1",
        "2",
        "3"
    ]
}

戻り値:

node app.js:
from getInstruments undefined

助言がありますか?ありがとう。

UPD : コードを次のように変更しました。

function getInstruments(callback) {
db.collection("settings", function(error, settings) {
    settings.find({ "settings" : "settings" }).toArray(function(err, docs) {
       console.dir(docs.instruments);
    });
});
}

結果:

[ { _id: 508677a3e5089a6df291631a,
settings: 'settings',
instruments: [ '1', '2', '3' ] } ]

変更:

function getInstruments(callback) {
    db.collection("settings", function(error, settings) {
        settings.find({ "settings" : "settings" }).toArray(function(err, docs) {
           console.dir(docs.instruments);
        });
    });
}

結果:

undefined

それはどのようにできますか?

4

2 に答える 2

0

find は配列を返します。したがって、val.length が 0 より大きいことを確認してから、val[0].instruments を確認する必要があります。

于 2012-10-25T20:38:16.070 に答える
0

ドキュメントの検索セクションの最後にある例を見てください。val.toArray()へのコールバック内で実行するfindと、返されたドキュメントをループして 1 つずつ処理できるはずです。

于 2012-10-25T21:02:26.837 に答える