0
点赞
收藏
分享

微信扫一扫

【MongoDB】MongoExport如何过滤数据导出

东林梁 2023-11-06 阅读 38

一、准备工作

这里准备一些学生数据

db.students.insertMany([
    { _id: 1,  name: "张三", age: 20, class: { id: 1, name: "1班" }},
    { _id: 2,  name: "李四", age: 22, class: { id: 2, name: "2班" }},
    { _id: 3,  name: "王五", age: 24, class: { id: 3, name: "3班" }},
]);

二、创建复合索引

1、创建索引

db.students.createIndex({ age: 1, name: 1 });

上面创建了age、name字段的复合索引,其中1代表的是正序排序,-1代表的是倒序排序

2、查询索引

db.students.getIndexes();

结果如下:

可以看到多了一个名称为age_1_name_1的索引

三、示例1:使用姓名和年龄查询

1、执行查询

db.students.find({ 
    age: { $gt: 21 }, 
    name: '李四' 
});

结果如下:

2、执行过程

db.students.find({ 
    age: { $gt: 21 }, 
    name: '李四' 
}).explain();

结果如下:

可以看到查询过程中会使用到索引名称为age_1_name_1的索引(查询时使用了age字段)

四、示例2:使用年龄查询

1、执行查询

db.students.find({ 
    age: { $gt: 21 }
});

结果如下:

2、执行过程

db.students.find({ 
    age: { $gt: 21 }
}).explain();

结果如下:

可以看到查询过程中会使用到索引名称为age_1_name_1的索引(查询时使用了age字段)

五、示例3:使用姓名查询

1、执行查询

db.students.find({ 
    name: '李四' 
});

结果如下:

2、执行过程

db.students.find({ 
    name: '李四' 
}).explain();

结果如下:

可以看到查询过程中未使用到索引名称为age_1_name_1的索引(查询时未使用age字段)

六、示例4:使用年龄和班级查询

1、执行查询

db.students.find({ 
    age: { $gt: 21 }, 
    'class.id': 3
});

结果如下:

2、执行过程

db.students.find({ 
    age: { $gt: 21 }, 
    'class.id': 3
}).explain();

结果如下:

可以看到查询过程中会使用到索引名称为age_1_name_1的索引(查询时使用了age字段)

举报

相关推荐

0 条评论