MongoDB elemMatch 和文本搜索。

问题描述 投票:0回答:1

1) 我正在使用elemMatch进行查找,工作正常。

db.getCollection ('folders'). find (

{accessControlList: {'$ elemMatch': {user: '5500014VRN'}}}

)

2) 我使用and进行查找,工作正常。

db.getCollection ('folders'). find (

{'$ text': {'$ search': 'vitae'}}

)

我想把1号和2号连接起来进行查找。

db.getCollection ('folders'). find
(
   [
      {
         "accessControlList": {
            "$ elemMatch": {
               "user": "5500014VRN"
            }
         }
      },
      {
         "$ text": {
            "$ search": "vitae"
         }
      }
   ]
)

但我得到以下错误。

Error: error: {
"operationTime": Timestamp (1589335216, 1),
"ok": 0,
"errmsg": "Failed to parse: filter: [{accessControlList: {$ elemMatch: {user: \" 5500014VRN \ "}}}, {$ text: {$ search: \" vitae \ "}}]. 'filter 'field must be of BSON type object. ",
"code": 9,
"codeName": "FailedToParse",
"$ clusterTime": {
"clusterTime": Timestamp (1589335216, 1),
"signature": {
"hash": BinData (0, "mS + God8HgJpqS7I / rxmxUNjQu70 ="),
"keyId": NumberLong ("6782247565090881537")
}
}
}

谁能帮帮我,好吗?

谢谢你的帮助

mongodb search text mongodb-query
1个回答
0
投票

从错误中可以看出:

'filter'字段必须是BSON类型的对象。"

你可以找到过滤部分领域的 .find() 函数必须是一个对象。语法 .find(filterObject, projectionObject). 与此相反的是 .find() 如果你看到 .aggregation([]) 你会发现所有的东西都被包裹在 [] 导致聚合有阶段,这些需要包裹在一个数组中 - 这就是所谓的聚合管道,但 .find() 吸纳对象 {} 有键值对,但不是数组。

它必须像这样。

db.getCollection("folders").find({
  accessControlList: { "$elemMatch": { user: "5500014VRN" } },
  $text: { "$search": "vitae" }
});
© www.soinside.com 2019 - 2024. All rights reserved.