如何使用mongodb将查找后的集合中的字符串与许多集合进行匹配

时间:2018-07-26 11:48:27

标签: node.js mongodb

此处是我的查询

  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”集合文档。

我无法创建新集合,因为循环后的数据可能是巨大的数据,因此 我不能每次搜索都插入新的大数据

查找后如何匹配字符串?

1 个答案:

答案 0 :(得分:0)

official mongodb documentation中所述,

  

$ text对用文本索引索引的字段的内容执行文本搜索。

但是索引只有在聚合查询的第一阶段才可以访问。这就是您出现错误消息的原因。

我看到您使用$ text / $ search的唯一方法是执行聚合(没有match阶段),添加$ out阶段以输出到新集合,在该集合上创建文本索引,然后执行使用$ text / $ search条件查找查询。

希望有帮助。