Mongodb $project内的$in运算符,$match或find()
我有一个使用$in检查指定数组是否包含在集合字符串数组中的查找查询:Mongodb $project内的$in运算符,$match或find(),mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有一个使用$in检查指定数组是否包含在集合字符串数组中的查找查询: db.Doc.find({tags:{'$in':['tag1','tag2']}}) 我正在重构此查询以使用聚合框架,但在$project或$match聚合阶段找不到等效的$in比较运算符 是否可以在聚合查询的$project或$match阶段使用$in比较运算符。查询:db.Doc.find({tags:{'$in:['tag1','tag2']})相当于: db.Doc.aggregate([ {$match:{tags
db.Doc.find({tags:{'$in':['tag1','tag2']}})
我正在重构此查询以使用聚合框架,但在$project
或$match
聚合阶段找不到等效的$in
比较运算符
是否可以在聚合查询的
$project
或$match
阶段使用$in
比较运算符。查询:db.Doc.find({tags:{'$in:['tag1','tag2']})
相当于:
db.Doc.aggregate([
{$match:{tags: {$in: ['tag1','tag2'] }}}
])
当您在投影处使用$in
时,如下所示:
db.Doc.aggregate([
{$project:{tags: {$in: ['tag1','tag2'] }}}
])
结果将是
标记:true
或标记:false
,具体取决于是否存在匹配项。回答您的问题:是的,但不是您所期望的。可以在聚合查询的$project或$match阶段使用$in运算符,但在每个阶段的用法和用途都不完全相同
有两种截然不同的“$in”运算符类型(造成语义混乱):
{$in:[,和
db.Doc.aggregate([
{ $match: { tags: {$in: ['tag1','tag2'] } } } // non-aggregational $in
])
db.Doc.aggregate([
{ $project: { hasAnyTag: {$in: [$tags, ['tag1', 'tag2'] ] } } } // aggregational $in
])