MongoDB findOne查询取决于结果

时间:2015-02-18 15:58:20

标签: mongodb nosql

我可以说我收集了一些内容并且记录看起来像这样:

{
    '_id' : MongoId('xxxxxx'),
    'dir' : '/home/',
    'category' : 'catname',
    'someData' : 'very important info'
}

是否可以只有一个查询,例如 collection.findOne({????},{'someData':1}); 以查找集合匹配这样:

  

通过dir查找,如果没有找到搜索类别名称,如果还有   没有找到类别名称的集合是'默认'

或者至少,我可以在此查询中说我想要第一个匹配目录,如果没有找到我想要匹配类别

collection.findOne({
    $or : [
        {'dir' : 'someCondition'},
        {'category' : 'someCondition'}
    ]
});

1 个答案:

答案 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将使一个保持在最顶层(即最佳匹配)。当然,请务必输入您自己的SOMEDIRSOMECATEGORY值。