Nodejs mongoose 查询问题

Nodejs mongoose 查询问题

如果我有许多post
{ created_at:Date title:String … }

如何查询 created_at在 某一时间点(例如:6-5-2014 10:11:12)最近的20个post?

必须分两次查询么

3 回复

当然可以。在 Node.js 中使用 Mongoose 进行查询时,可以通过一次查询实现获取 created_at 在某一时间点(例如:6-5-2014 10:11:12)最近的20个 post 的需求。Mongoose 提供了强大的查询功能,可以轻松完成这样的任务。

以下是一个示例代码,展示了如何进行这样的查询:

const mongoose = require('mongoose');
const Post = mongoose.model('Post', new mongoose.Schema({
    created_at: { type: Date, default: Date.now },
    title: String,
}));

async function getRecentPosts(date) {
    try {
        const posts = await Post.find({ created_at: { $lt: date } })
            .sort({ created_at: -1 }) // 按 created_at 字段降序排序
            .limit(20); // 只返回最新的20条记录

        return posts;
    } catch (error) {
        console.error(error);
        throw error;
    }
}

// 示例调用
const targetDate = new Date('2014-06-05T10:11:12Z'); // 注意这里的时间格式

getRecentPosts(targetDate)
    .then(posts => {
        console.log('最近的20个post:', posts);
    })
    .catch(err => {
        console.error('查询错误:', err);
    });

解释:

  1. 定义模型:首先我们定义了一个 Post 模型,其中包含 created_attitle 字段。
  2. 查询函数:定义了一个异步函数 getRecentPosts,该函数接受一个目标日期作为参数。
  3. 查询逻辑
    • 使用 .find() 方法查找所有 created_at 小于目标日期的文档。
    • 使用 .sort({ created_at: -1 }) 对结果按 created_at 字段降序排序。
    • 使用 .limit(20) 限制返回的结果数量为20条。
  4. 示例调用:通过传入一个特定的目标日期来获取该时间点前的最新20个 post。

这样,你就可以一次性完成所需的数据查询,而不需要进行两次查询操作。


db.xxx.find({created_at:{&gte:'6-5-2014 10:11:12'}}).limit(20)

这个查询说的是, 时间大于等于 created_at 的前 20个post,不知道是不是楼主想要的

要在 Mongoose 中查询 created_at 在某一时间点最近的 20 个 post,你可以直接使用一个查询来完成,而不需要分两次查询。Mongoose 提供了强大的查询接口,可以直接实现这个需求。

示例代码

const Post = require('./models/Post'); // 假设你的模型文件为 models/Post.js

const targetTime = new Date('6-5-2014 10:11:12');

Post.find({
    created_at: {
        $gte: targetTime // 查询 created_at 大于等于目标时间点的 post
    }
})
.sort({ created_at: -1 }) // 按 created_at 字段降序排序
.limit(20) // 只返回最近的 20 个 post
.exec((err, posts) => {
    if (err) return console.error(err);
    console.log(posts); // 输出最近的 20 个 post
});

解释

  1. 定义目标时间:首先创建一个表示目标时间点的 Date 对象。
  2. 构建查询条件:使用 find 方法,传入一个查询条件对象,这里使用 $gte 操作符来查询 created_at 大于等于目标时间点的 post。
  3. 排序:使用 sort 方法按 created_at 字段降序排序,以确保最新的记录排在前面。
  4. 限制结果数量:使用 limit 方法限制返回的结果数量为 20。
  5. 执行查询:调用 exec 方法执行查询,并在回调函数中处理结果。

这种方式可以在一次查询中完成,不需要分两次查询。希望这能帮助到你!

回到顶部