Shell 如何在mongodb函数中执行mongodb查询?

Shell 如何在mongodb函数中执行mongodb查询?,shell,scripting,mongodb,serverside-javascript,Shell,Scripting,Mongodb,Serverside Javascript,我正在尝试从mongo shell编写mongo脚本,但遇到了一个小问题。我会让代码自己解释 var shops = db.Shop.find({}) function printShopUrl(data) { var name, url; for (var i = 0; i < data.length(); i++) { name = data[i].name; url = db.Instance.findOne({name:name})

我正在尝试从mongo shell编写mongo脚本,但遇到了一个小问题。我会让代码自己解释

var shops = db.Shop.find({})

function printShopUrl(data) {
    var name, url;
    for (var i = 0; i < data.length(); i++) {
        name = data[i].name;
        url = db.Instance.findOne({name:name}).url;
        print(url);
    }
}

printShopUrl(shops)

知道我做错了什么吗?

主要问题:以下内容可能不会返回值
db.Instance.findOne({name:name})
。因此,当您添加
.url
时,您试图从空值中获取一个值

请尝试以下操作:

var obj = db.Instance.findOne({name:name});
if(obj && obj.url) { print(obj.url); }

name
字段(
name=data[i].name
)也存在同样的潜在问题。

看起来查询没有找到任何内容,在这种情况下,它将返回null。打印出中间结果db.Instance.findOne({name:name})-你看到了什么?谢谢E先生,这正是我遇到的问题。我试图回答我自己的问题,但我没有足够的理由。所以我将在这里发布我的解决方案。。我想我不能,它太长了,但是是的,我所做的只是把它包装在一个try-catch中,它就工作了。try-catch是多余的,只要做
if(result)print(result.url)
var obj = db.Instance.findOne({name:name});
if(obj && obj.url) { print(obj.url); }