在我的收藏中,文档包含状态和时间戳等键。当我想查找最新的十个文档时,我会编写以下查询
db.collectionsname.find().sort({"timestamp"-1}).limit(10)
这个查询给了我想要的结果,但是当我想删除最近的十个文档时,我正在编写以下查询
db.collectionsname.remove({"status":0},10).sort({"timestamp":-1})
但它显示以下错误
TypeError: 无法调用未定义的方法“排序”
我又写了如下相同的查询
db.collectionsname.remove({"status":0},10)
它只删除一个文档。那么如何编写一个删除十个最新文档并按时间戳排序的查询呢?
最佳答案
使用 remove
或 findAndModify
时不能设置限制。因此,如果您想精确限制删除的文档数量,您需要分两步完成。
db.collectionName.find({}, {_id : 1})
.limit(100)
.sort({timestamp:-1})
.toArray()
.map(function(doc) { return doc._id; }); // Pull out just the _ids
然后将返回的_id
s传递给remove方法:
db.collectionName.remove({_id: {$in: removeIdsArray}})
仅供引用:您不能从有上限的集合中删除文档。
https://stackoverflow.com/questions/19065615/
相关文章:
java - java中使用mongodb的createIndex()和ensureIndex()的
node.js - 如何使用 Mongoose findOne
javascript - .save() 和使用 update() 之间的 Mongoose 区别
mongodb - "db.createUser is not a function"和 "pass
mongodb - 如何列出 mongo shell 中的所有用户?
ruby-on-rails - 批量查找 mongoDB 记录(使用 mongoid ruby