限制mongodb查询中的记录

时间:2015-07-08 11:12:08

标签: javascript mongodb

这是MongoDB中的文档,我需要限制输出:

{
    "_id": ObjectId("55880fb8c3addd201ee2f70e"),
    "title": "Sales",
    "level1": [{
    "name": "Master",
    "link": "/sales/master"
    }, {
    "name": "eCommerce",
    "link": "/sales/ecommerce"
    }]
}

我的搜索查询是:

db.collection.find({
    title: "Sales",
    "level1.name": "Master"
}, {
    "title": 1,
    "level1.name": 1,
    "level1.name": "Master"
})

这是预期的输出:

{
    "_id": ObjectId("55880fb8c3addd201ee2f70e"),
    "title": "Sales",
    "level1": [{
    "name": "Master",
    "link": "/sales/master"
    }]
}

2 个答案:

答案 0 :(得分:0)

请尝试以下查询:

 db.collection.find({title :"Sales",
                     level1: {$elematch: {name" : "Master"}}},
                    {title : 1, level1.$ : 1});

答案 1 :(得分:0)

您可以使用aggregation class SbyteToBoolConverter: IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value if sbyte) return ConvertSbyteToBool((sbyte)value); else return ConvertBoolToSbyte((bool)value); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value is bool) return ConvertBoolToSbyte((bool)value); else return ConvertSbyteToBool((sbyte)value); } ... } 数组$unwind来获得预期结果,如下所示:

level1

如果您希望所有人都在一个阵列下,您可以将其分组为:

db.collection.aggregate({$unwind:"$level1"},{$match:{"level1.name":"Master","title" :"Sales"}})