【发布时间】:2018-01-30 18:45:43
【问题描述】:
db.getCollection('regions').aggregate([
{ $match: { 'status': 1 },
{ $project: {
names: { $filter: {
input: '$names',
as: 'name',
cond: {$or: [
{ $eq: ['$$name.lang', 'de'] },
{ $eq: ['$$name.lang', 'en'] },
{ $eq: ['$$name.lang', 'es'] },
]}
}}
}}
])
是否可以将 $or 条件替换为单个 $in: ['de', 'en', 'es'] 条件?
这不起作用:
db.getCollection('regions').aggregate([
{ $match: { 'osm.parent': 0, 'osm.admin_level': 2 }},
{ $project: {
osm: 1,
names: { $filter: {
input: '$names',
as: 'name',
cond: { $in: [ '$$name.lang', ['de','en','es'] ]}
}}
}}
])
【问题讨论】:
-
你的 mongo 版本是什么?这应该在 3.4 中工作。您可以从您的收藏中添加一个示例文档吗?
-
Mongo 版本是 3.2.9。啊,这是3.4 版的新功能。谢谢!
标签: mongodb aggregation-framework