MongoDB-Realm(聚合$search text)需要具有搜索文档级权限的角色才能执行$search

MongoDB-Realm(聚合$search text)需要具有搜索文档级权限的角色才能执行$search,mongodb,realm,full-text-search,serverless,Mongodb,Realm,Full Text Search,Serverless,我试图使用Realm作为我的无服务器身份验证器和服务器函数对我的MongoDB进行全文查询。 在Realm中,我创建了一个可以从客户端调用的函数来执行此查询。函数如下所示: exports = function( jobName,collection="jobs"){ const agg = [ { '$search': { 'text': { 'path': [ 'name', 'description'

我试图使用Realm作为我的无服务器身份验证器和服务器函数对我的MongoDB进行全文查询。 在Realm中,我创建了一个可以从客户端调用的函数来执行此查询。函数如下所示:

exports = function( jobName,collection="jobs"){
  const agg = [
   {
    '$search': {
      'text': {
        'path': [
          'name', 'description'
        ],
        'query': jobName,
        'fuzzy': {}
       }
     }
   }
   ];
   var collectionObj = context.services.get("mongodb-atlas").db("myDb").collection(collection);
   var result = collectionObj.aggregate(agg)
   return result;
};
如果我以系统用户的身份运行这个函数,我就可以从数据库中得到我想要的东西。但是如果我想以匿名用户身份运行搜索,我会得到以下错误:

A role with a search document-level permission is required to perform a $search
因此,我转到我的角色,创建了一个名为“普通”的角色,具有文档级搜索权限:

错误仍在发生,我不知道在哪里继续查找。用户中的高级选项还显示搜索字段变为true:

  {
  "name": "normal",
  "apply_when": {},
  "insert": false,
  "delete": false,
  "search": true,
  "read": true,
  "fields": {
    "description": {},
    "name": {}
  },
  "additional_fields": {}
}

因此,有一种方法可以从客户端通过realm使用全文函数,但它涉及到创建一个开放的RESTAPI。我们可以创建一个RESTAPI并从该入口点返回搜索,而不是通过客户端调用函数。MongoDB的Karen Huaulme对她做了类似的事。这确实不是我所希望的答案,但这是一个很好的解决方法。

因此,有一种方法可以从客户端通过realm使用全文函数,但它需要创建一个开放的RESTAPI。我们可以创建一个RESTAPI并从该入口点返回搜索,而不是通过客户端调用函数。MongoDB的Karen Huaulme对她做了类似的事。这确实不是我所希望的答案,但这是一个很好的解决办法