此处是我的查询
model.db.aggregate([{$lookup: {from: 'orders', localField: 'prod_id',
foreignField: '_id', as: 'Col'}},{$match:{$text:
{$search:'Sale'}}}).exec((err,data) => {console.log(data);}]);
但是显示错误“仅将$ match与$ text用作第一个管道!”
我只想查找许多集合,然后只需要在我们之前加入(查找)的所有数据中匹配“搜索”。 mongoDb版本:4.0
有人有想法吗?需要帮助!
谢谢!!
这些都是我的示例收藏集:
collection 1 ->
organization ={'_id':ObjectId("5b110a7b84a0442030a1e9cf"),'Org_name':'dhoni institute','Estd':'1945'}
collection 2 -> players= {'_id':ObjectId("45110a7b84a3542030a1e9cf"),'_name':'Ms dhoni','Org_id' = ObjectId("5b110a7b84a0442030a1e9cf") }
我正在Db中搜索文本字符串“ dhoni”。然后,我希望这些集合中包含单词“ dhoni”的所有文档。
怎么办?
db.players.aggregate([{$match:{$text:{$search:'dhoni'}}},
{
$lookup{from:'organization',localField:'_id',foreignField:'Org_id',as:'org'}
}
]).exec((err,data) => {}
这是我的代码,它只匹配“ players”集合中的字符串。我需要匹配的“ players”集合文档以及“ Organization”集合文档。
我无法创建新集合,因为循环后的数据可能是巨大的数据,因此 我不能每次搜索都插入新的大数据
查找后如何匹配字符串?
答案 0 :(得分:0)
如official mongodb documentation中所述,
$ text对用文本索引索引的字段的内容执行文本搜索。
但是索引只有在聚合查询的第一阶段才可以访问。这就是您出现错误消息的原因。
我看到您使用$ text / $ search的唯一方法是执行聚合(没有match阶段),添加$ out阶段以输出到新集合,在该集合上创建文本索引,然后执行使用$ text / $ search条件查找查询。
希望有帮助。