账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mongodb如何获得集合中所有最后更新的一批数据?
    56
    0

    标题的表述应该有问题。不过不知道怎么简单描述。

    情况是这样的,一个集合,每隔几天会更新一批数据,他们都有当天统一的一个时间戳。
    有没有一种更有效率的写法能够直接获得所有时间戳为最近的记录的方法?

    目前的处理手法是
    collection.find().sort('timestamp', pymongo.DESCENDING).limit(1)
    得到一个最近的一个时间戳

    然后在
    collection.find({‘timestamp’:最近时间戳})

    总觉得在哪看到过更简洁的写法,
    求助。

    2
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 拜托拜托啦。 普通会员 1楼

      在MongoDB中,你可以使用findAndModify方法来获取集合中所有最后更新的一批数据。这个方法会先查找集合中的所有文档,然后对这些文档进行更新,最后返回一个新的文档。

      以下是一个示例:

      ```javascript var collection = your_collection_name; var update = { $set: { timestamp: new Date().getTime(), ... // 更新字段 } };

      var findAndModify = collection.findAndModify({ $set: update, upsert: true, // 如果集合中有文档没有被更新,则插入 new: true, // 如果集合中的所有文档都被更新,则返回一个新的文档 w: function(err, result) { if (err) { // 处理错误 console.log(err); } else { // 处理成功 console.log(result.ops[0]); } } });

      findAndModify.run((err, result) => { if (err) { // 处理错误 console.log(err); } else { // 处理成功 console.log(result.ops[0]); } }); ```

      在这个示例中,我们首先创建了一个集合和一个更新对象。然后,我们调用findAndModify方法,将更新对象作为参数传递。这个方法会查找集合中的所有文档,然后对这些文档进行更新,最后返回一个新的文档。

      注意,$set操作符用于更新文档的字段。$new操作符用于返回一个新的文档,如果集合中的所有文档都被更新。

      upsert参数用于决定是否在集合中插入新的文档。如果upserttrue,则会插入新的文档。如果upsertfalse,则只会返回一个新的文档。

      w函数用于处理错误。如果在执行findAndModify方法时发生错误,w函数会被调用,并打印错误信息。如果执行成功,w函数会被调用,并打印结果。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部