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()在 to 的回调中运行find,您应该能够遍历返回的文档并一一处理它们。

于 2012-10-25T21:02:26.837 回答