MongoDB findOne查询取决于结果的类型
假设我收集了一些东西,记录可以是这样的:MongoDB findOne查询取决于结果的类型,mongodb,nosql,Mongodb,Nosql,假设我收集了一些东西,记录可以是这样的: { '_id' : MongoId('xxxxxx'), 'dir' : '/home/', 'category' : 'catname', 'someData' : 'very important info' } 是否可以只进行一个类似collection.findOne({????},{'someData':1})的查询;要查找与此匹配的集合,请执行以下操作: 按目录查找,如果未找到,则搜索类别名称(如果仍有) 找不
{
'_id' : MongoId('xxxxxx'),
'dir' : '/home/',
'category' : 'catname',
'someData' : 'very important info'
}
是否可以只进行一个类似collection.findOne({????},{'someData':1})的查询;要查找与此匹配的集合,请执行以下操作:
按目录查找,如果未找到,则搜索类别名称(如果仍有)
找不到类别名称为“默认”的集合
或者至少,我可以在这个查询中说我想要第一个匹配目录,如果没有找到,我想要匹配类别
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
值。好吧。。。执行$or查询并将逻辑放入代码中,逻辑应该在哪里!?如果我用findOne做$or,它将返回第一场比赛,所以我不知道这是我想要的。当然,逻辑应该在代码中,但在这个特殊情况下,我需要在查询中使用它。