【问题标题】:How to Match the string from collection after lookup with many collection using mongodb如何在使用 mongodb 查找多个集合后从集合中匹配字符串
【发布时间】:2018-07-26 11:48:27
【问题描述】:

这是我的查询

  model.db.aggregate([{$lookup: {from: 'orders', localField: 'prod_id', 
  foreignField: '_id', as: 'Col'}},{$match:{$text: 
  {$search:'Sale'}}}).exec((err,data) => {console.log(data);}]);

但错误显示“$match with $text is only allowed as the first pipeline !!”

我只想查找许多集合,然后只需要在我们之前加入(查找)的所有数据中匹配“搜索”。 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) => {}

这是我的代码 它只匹配“玩家”集合中的字符串。我需要匹配的“玩家”集合文档以及“组织”集合文档。

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

查找后如何匹配字符串?

【问题讨论】:

标签: node.js mongodb


【解决方案1】:

official mongodb documentation 中所述,

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

但索引只能通过聚合查询的第一阶段访问。这就是您的错误消息的原因。

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

希望对您有所帮助。

【讨论】:

  • 好的,但是您能提供之前收藏的样本吗?
  • 我刚刚更新了收藏详情和我的代码!我需要你的帮助@matthPen
猜你喜欢
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 2019-03-17
  • 2016-06-07
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
相关资源
最近更新 更多