我可以说我收集了一些内容并且记录看起来像这样:
{
'_id' : MongoId('xxxxxx'),
'dir' : '/home/',
'category' : 'catname',
'someData' : 'very important info'
}
是否可以只有一个查询,例如 collection.findOne({????},{'someData':1}); 以查找集合匹配这样:
通过dir查找,如果没有找到搜索类别名称,如果还有 没有找到类别名称的集合是'默认'
或者至少,我可以在此查询中说我想要第一个匹配目录,如果没有找到我想要匹配类别
collection.findOne({
$or : [
{'dir' : 'someCondition'},
{'category' : 'someCondition'}
]
});
答案 0 :(得分:1)
试试这个:
db.collection.aggregate([
{ '$project':
{
//Keep existing fields
'_id':1,
'dir':1,
'category':1,
'someData':1,
//Compute some new values
'sameDir': {'$eq':['$dir', 'SOMEDIR']},
'sameCategory': {'$eq':['$dir', 'SOMECATEGORY']},
'defaultCategory': {'$eq':['$dir', 'default']},
}
},
{ '$sort':
{
'sameDir': -1,
'sameCategory': -1,
'defaultCategory': -1,
}
},
{ '$limit': 1 }
])
$sort
将首先保持真值,因此首先是目录匹配,然后是类别匹配,最后是默认类别。 $limit:1
将使一个保持在最顶层(即最佳匹配)。当然,请务必输入您自己的SOMEDIR
和SOMECATEGORY
值。