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")
}
}
}
谁能帮帮我,好吗?
谢谢你的帮助
从错误中可以看出:
'filter'字段必须是BSON类型的对象。"
你可以找到过滤部分领域的 .find() 函数必须是一个对象。语法 .find(filterObject, projectionObject)
. 与此相反的是 .find()
如果你看到 .aggregation([]) 你会发现所有的东西都被包裹在 []
导致聚合有阶段,这些需要包裹在一个数组中 - 这就是所谓的聚合管道,但 .find()
吸纳对象 {}
有键值对,但不是数组。
它必须像这样。
db.getCollection("folders").find({
accessControlList: { "$elemMatch": { user: "5500014VRN" } },
$text: { "$search": "vitae" }
});