MST

星途 面试题库

面试题:MongoDB游标操作之复杂查询与排序

给定一个MongoDB数据库,其中有一个`orders`集合,包含订单信息,每个订单文档有`order_date`(订单日期,格式为ISODate)、`total_amount`(订单总金额)、`customer_id`(客户ID)等字段。要求使用游标实现以下操作:查询出2023年1月1日之后的订单,按照`total_amount`从高到低排序,并且只返回`customer_id`和`total_amount`字段,同时限制每次返回10条数据,如何实现?
49.1万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

在MongoDB中,可以使用以下代码实现上述要求:

var cursor = db.orders.find({
    order_date: { $gt: new ISODate("2023-01-01") }
}, {
    customer_id: 1,
    total_amount: 1,
    _id: 0
})
.sort({ total_amount: -1 })
.limit(10);

while (cursor.hasNext()) {
    printjson(cursor.next());
}

解释:

  1. db.orders.find:从orders集合中查询数据。
  2. { order_date: { $gt: new ISODate("2023-01-01") } }:查询条件,筛选出order_date大于2023年1月1日的订单。
  3. { customer_id: 1, total_amount: 1, _id: 0 }:投影,指定返回的字段,这里只返回customer_idtotal_amount,并排除_id字段。
  4. .sort({ total_amount: -1 }):按照total_amount从高到低排序。
  5. .limit(10):限制每次返回10条数据。
  6. 使用while循环遍历游标并打印结果。

在不同编程语言的MongoDB驱动中,语法会略有不同,但基本思路一致。例如在Python中使用pymongo库:

from pymongo import MongoClient

client = MongoClient()
db = client.get_database()
orders = db.get_collection('orders')

cursor = orders.find({
    "order_date": { "$gt": "2023-01-01" }
}, {
    "customer_id": 1,
    "total_amount": 1,
    "_id": 0
}).sort("total_amount", -1).limit(10)

for doc in cursor:
    print(doc)