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'] },
]}
}}
}}
])
是否可以将$或条件替换为单个$ 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'] ]}
}}
}}
])
答案 0 :(得分:0)
你可以尝试:
{ $unwind : "$name" }
{ $match : { "$name.lang" : { "$in" : [ "de", "en", "es"] } }}
而不是在投影中使用$filter
。
db.getCollection('regions').aggregate([
{ $match: { 'osm.parent': 0, 'osm.admin_level': 2 } },
{ $unwind : "$name" },
{ $match : { "$name.lang" : { "$in" : [ "de", "en", "es"] } } },
{ $project: { osm: 1, "name.lang": 1 } }
])