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 函数没有返回值?的主要内容,如果未能解决你的问题,请参考以下文章