我的集合中有一个现有的数据结构,基本上看起来像这样(简化):
[
{ items: [
{ id: '000', value: 'string' },
{ id: '001', value: 1234 },
{ id: '002', value: true },
...
] },
{ items: [
{ id: '000', value: 'another string' },
{ id: '001', value: 2345 },
{ id: '002', value: false },
...
] },
...
]
字符串
现在我想搜索某些id
s的值(由用户动态选择),匹配正则表达式(由用户输入并正确转义,实际上只搜索子字符串)。由于我需要提取上述id
s的值,我使用以$match
开始的聚合管道:
{ $match: {
items: { $elemMatch: {
item_id: { $in: ['000', '002'] },
item_data: { $regex: 'e', $options: 'i' }
} }
} }
型
我期望两个文档都返回-第一个是由于'true'中匹配的'e',第二个是由于'another'中匹配的'e'。但我意识到$regex
运算符只对字符串值有效,而忽略所有其他类型。我想要的是将其他类型转换为字符串(通过$toString
或类似的东西),所以我也可以搜索数字和其他数据类型。这可能使用$elemMatch
还是我需要另一个运算符?
1条答案
按热度按时间ojsjcaue1#
将
$or
条件放入$map
中,以生成一个布尔数组。然后使用$anyElementTrue
返回整个文档。您可以将整个文档 Package 在$expr
中,然后将其放入find
中。是的,您将需要$toString
将非字符串value
字段转换为$regexMatch
。字符串
Mongo Playground