【问题标题】:how to do a mongodb query in a mongodb function?如何在 mongodb 函数中进行 mongodb 查询?
【发布时间】:2011-09-12 03:49:45
【问题描述】:

我正在尝试从 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)

所以我现在要做的只是打印 url,但是当我运行这个查询时,我得到了一个错误。

TypeError: db.Instance.findOne({name:name}) has no properties (shell):1

知道我做错了什么吗?

【问题讨论】:

  • 查询似乎没有找到任何东西,在这种情况下它将返回 null。打印出中间结果db.Instance.findOne({name:name}) - 你看到了什么?
  • 感谢 E 先生,这正是我遇到的问题。我试图回答我自己的问题,但我没有足够的观点。所以我会在这里发布我的解决方案。 .. 我想我不能,它太长了,但是,是的,我所做的只是将它包裹在一个 try catch 中,它可以工作。
  • try catch 太过分了,就做if(result) print(result.url);

标签: shell scripting mongodb serverside-javascript


【解决方案1】:

主要问题:以下可能不会返回值db.Instance.findOne({name:name})。因此,当您添加 .url 时,您是在尝试从 null 中获取值。

尝试以下方法:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多