MongoDB findOne 查询取决于结果
MongoDB findOne query depends of result
假设我有 collection 的东西,记录可以是这样的:
{
'_id' : MongoId('xxxxxx'),
'dir' : '/home/',
'category' : 'catname',
'someData' : 'very important info'
}
是否可以只进行一个查询,例如collection.findOne({?????}, {'someData' : 1 }); 找到与此匹配的集合:
find by dir, if not found search for category name, if there is still
nothing find collection with category name is 'default'
或者至少,我可以在此查询中说我想要第一个匹配目录,如果没有找到我想要匹配类别
collection.findOne({
$or : [
{'dir' : 'someCondition'},
{'category' : 'someCondition'}
]
});
试试这个:
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
值。
假设我有 collection 的东西,记录可以是这样的:
{
'_id' : MongoId('xxxxxx'),
'dir' : '/home/',
'category' : 'catname',
'someData' : 'very important info'
}
是否可以只进行一个查询,例如collection.findOne({?????}, {'someData' : 1 }); 找到与此匹配的集合:
find by dir, if not found search for category name, if there is still nothing find collection with category name is 'default'
或者至少,我可以在此查询中说我想要第一个匹配目录,如果没有找到我想要匹配类别
collection.findOne({
$or : [
{'dir' : 'someCondition'},
{'category' : 'someCondition'}
]
});
试试这个:
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
值。