mongodb是否支持像redis中的spop一样的动作?

时间:2014-07-31 02:22:55

标签: python mongodb pymongo

我正在使用python和mongo的新手,我想编写一个函数来从mongodb集合中弹出文档。可以先弹出或随机弹出。我说' pop'因为我想在它返回时删除这个文件。但是我在mongodb官方网站上找不到这样的api,还有其他办法吗?

1 个答案:

答案 0 :(得分:3)

findAndModify()可以处理它,传递remove: true并在删除之前返回文档:

db.people.findAndModify(
   {
     query: { state: "active" },
     sort: { rating: 1 },
     remove: true
   }
)

pymongo开始,使用find_and_modify()方法。


演示:

> use foo
switched to db foo
> db.foo.insert({'test1': 1})
> db.foo.insert({'test2': 2})
> db.foo.insert({'test3': 3})
> db.foo.find()
{ "_id" : ObjectId("53d9af555f2067b54975678c"), "test1" : 1 }
{ "_id" : ObjectId("53d9af5a5f2067b54975678d"), "test2" : 2 }
{ "_id" : ObjectId("53d9af5d5f2067b54975678e"), "test3" : 3 }
> db.foo.findAndModify({remove: true})
{ "_id" : ObjectId("53d9af555f2067b54975678c"), "test1" : 1 }
> db.foo.findAndModify({remove: true})
{ "_id" : ObjectId("53d9af5a5f2067b54975678d"), "test2" : 2 }
> db.foo.findAndModify({remove: true})
{ "_id" : ObjectId("53d9af5d5f2067b54975678e"), "test3" : 3 }
> db.foo.count()
0