MongoDB:为啥这个存储的 JS 函数没有返回值?

Posted

技术标签:

【中文标题】MongoDB:为啥这个存储的 JS 函数没有返回值?【英文标题】:MongoDB: Why doesn't this stored JS function return a value?MongoDB:为什么这个存储的 JS 函数没有返回值? 【发布时间】:2021-06-05 10:19:46 【问题描述】:

考虑这个虚拟函数:

db.system.js.save(
    _id:"findId", 
    value:function()
        var doc = db.test.find("_id": "1")
        return doc['_id']
    
    )

运行它时,我一无所获。

但是,如果我只是 return db.test.find("_id": "1") 我确实会得到文档。

有什么区别?

更广泛的问题:我可以在服务器端执行任意 JS 代码吗?

例如,我想检索一个文档并有一些 if-else 逻辑

【问题讨论】:

【参考方案1】:

db.test.find("_id": "1") 返回Promise,并且您不会在返回数据之前等待它解决。所以,当你返回doc['_id'] 时,doc 就是undefined。因此,您应该在 Promise 解决后返回该值。你可以这样做:

db.test.find("_id": "1").then((document) => 
  return document .id;
)

【讨论】:

以上是关于MongoDB:为啥这个存储的 JS 函数没有返回值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥猫鼬不更新?

为啥这个函数序言中没有“sub rsp”指令,为啥函数参数存储在负 rbp 偏移处?

为啥这个函数序言中没有“sub rsp”指令,为啥函数参数存储在负 rbp 偏移量?

为啥我不能像传递其他变量一样将函数从 Express.js 传递给 EJS?

为啥这个 PHP MongoDB 查询即使有结果也不返回任何结果?

为啥我在构造函数中填充的这个数组在构造函数返回后没有填充?