我的词典有这样的结构:
{"_id":"name","tweets:[tweet1, tweet2, tweet,3]}
我需要执行一个返回具有特定字符串的推文的查询。想象一下,tweet2包含字符串“hello”,我希望所有其他字典中的推文都包含该字符串。
我一直在使用以下查询,但它没有给我正确的结果:
db.collection.find({"tweets":{{$elemMatch:{$regex:".*hello*."}}})
感谢您的帮助
答案 0 :(得分:1)
您可以按照以下方式执行此操作:
db.collections.find({tweets: {$regex: new RegExp('^.*' + "tweet2" + '.*', 'i')}}, {tweets: {$elemMatch: {$regex: new RegExp('^.*' + "tweet2" + '.*', 'i')}}})
但 $ elemMatch 投影运算符提供了另一种方法来更改返回的文档,使其仅包含第一个匹配的tweets元素。
您也可以通过位置($)运算符获得相同的输出。
如果您需要在投影期间过滤数组,其中包括所有匹配项,而不仅仅是第一项匹配项,您可以使用$filter聚合运算符。
希望它能起作用