Nodejs mongodb在查询结果中查询的操作要怎么弄

Nodejs mongodb在查询结果中查询的操作要怎么弄

文章有2个属性 一个是热度,一个是时间. 我想获取热度最高的4篇文章之后,去除这4篇文章,其他的按时间排序
mongodb要怎么写呀 获取4篇我知道怎么弄 后面代码要怎么写

7 回复

要在Node.js中使用MongoDB实现你描述的功能,你需要分两步进行操作:

  1. 首先,从数据库中找出热度最高的4篇文章。
  2. 然后,排除这4篇文章,按时间对剩余的文章进行排序。

下面是具体的代码示例:

const MongoClient = require('mongodb').MongoClient;

// 连接到MongoDB数据库
MongoClient.connect('mongodb://localhost:27017/yourDatabase', { useNewUrlParser: true, useUnifiedTopology: true })
  .then(client => {
    console.log('Connected to Database');
    const db = client.db('yourDatabase');

    // 获取热度最高的4篇文章
    db.collection('articles')
      .find()
      .sort({ heat: -1 })  // 按热度降序排列
      .limit(4)
      .toArray()
      .then(topArticles => {
        // 获取这些文章的ID
        const topArticleIds = topArticles.map(article => article._id);

        // 排除这4篇文章,按时间排序
        db.collection('articles')
          .find({ _id: { $nin: topArticleIds } })  // 排除指定ID的文章
          .sort({ createdAt: -1 })  // 按时间降序排列
          .toArray()
          .then(otherArticles => {
            console.log(otherArticles);
            client.close();
          });
      });
  })
  .catch(error => console.error(error));

解释

  • 连接到MongoDB:使用MongoClient.connect方法连接到MongoDB数据库。
  • 获取热度最高的4篇文章:使用find()方法查找所有文章,并通过sort()方法按热度降序排列。limit(4)限制结果数量为4。
  • 排除这些文章:通过$nin操作符排除之前找到的4篇文章。
  • 按时间排序:再次调用find()方法,这次排除了热度最高的文章,然后按时间降序排列。

这样,你就可以实现获取热度最高的4篇文章并排除它们,然后按时间排序其他文章的需求。


写在获取文章方法的callback里面就可以了, 在callback里面执行删除文章。

不是要 删除掉 只是想跳过而已 问题是怎么写 才能既要去除热度前4,而且排序还要按时间排 callback里面 可以按时间排序?

感觉只能把结果扫描一遍勒~

db.posts.aggregate([
  { $sort: { hotness: -1 } },
  { $skip: 4 },
  { $sort: { updateAt: -1 } },
  { $limit: 20 } // optional
], function(err, docs) {
})

aggregate稍微查了下 要的就是这种函数 待会去试试 谢了

要实现你的需求,可以分两步来操作:

  1. 首先获取热度最高的4篇文章。
  2. 然后从剩余的文章中按时间排序。

下面是使用 mongodbnode.js 的示例代码来实现这一功能:

const MongoClient = require('mongodb').MongoClient;

async function getArticles() {
    const uri = "your_mongodb_connection_string";
    const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

    try {
        await client.connect();
        const database = client.db('your_database_name');
        const collection = database.collection('articles');

        // Step 1: 获取热度最高的4篇文章
        const top4Articles = await collection.find()
            .sort({热度: -1}) // 按热度降序排列
            .limit(4)
            .toArray();

        // Step 2: 去除这4篇文章,然后按时间排序
        const remainingArticles = await collection.find({
            _id: { $nin: top4Articles.map(article => article._id) }
        })
        .sort({时间: 1}) // 按时间升序排列
        .toArray();

        console.log("Top 4 Articles:", top4Articles);
        console.log("Remaining Articles Sorted by Time:", remainingArticles);

    } finally {
        await client.close();
    }
}

getArticles().catch(console.error);

在这段代码中:

  • 我们首先连接到 MongoDB 数据库,并选择对应的集合。
  • 然后我们通过 .find() 方法找到热度最高的4篇文章。
  • 接着我们再次查找文档,但这次排除了热度最高的4篇文章(通过 $nin 操作符)。
  • 最后对排除后的文档进行时间排序。

这段代码展示了如何在 MongoDB 中执行复杂的查询操作,包括排序、限制数量以及排除某些文档。希望这能满足你的需求。

回到顶部