[MONGODB] MongoDB를 문서의 N 번호를 삭제하는 방법
MONGODBMongoDB를 문서의 N 번호를 삭제하는 방법
내 컬렉션에서, 문서 상태 및 타임 스탬프와 같은 키가 포함되어 있습니다. 그때 최신 열 문서를 검색 할 때 나는 다음과 같은 쿼리를 작성
db.collectionsname.find().sort({"timestamp"-1}).limit(10)
이 쿼리는 제가 원하는 결과를 제공하지만 그때 나는 다음과 같은 쿼리를 작성했다 최신 열 문서를 삭제하고자 할 때
db.collectionsname.remove({"status":0},10).sort({"timestamp":-1})
그러나 다음과 같은 오류가 표시됩니다 형식 오류는 '일종의'정의되지 않은 방법을 호출 할 수 없습니다 다시 나는 다음과 같은 쿼리를 작성 db.collectionsname.remove ({ "상태": 0}, 10) 그것은 단지 하나의 문서를 삭제합니다. 그래서 어떻게 10 개 최신 문서 및 종류의 타임 스탬프를 삭제하는 쿼리를 작성할 수 있습니까?
해결법
-
==============================
1.제거 또는 findAndModify을 사용할 때 제한을 설정할 수 없습니다. 당신이 정확하게 문서의 수를 제거 제한 할 경우에 따라서, 당신은 두 단계를 수행해야합니다.
제거 또는 findAndModify을 사용할 때 제한을 설정할 수 없습니다. 당신이 정확하게 문서의 수를 제거 제한 할 경우에 따라서, 당신은 두 단계를 수행해야합니다.
db.collectionName.find({}, {_id : 1}) .limit(100) .sort({timestamp:-1}) .toArray() .map(function(doc) { return doc._id; }); // Pull out just the _ids
그런 다음 제거 방법에 반환 _ids을 통과 :
db.collectionName.remove({_id: {$in: removeIdsArray}})
참고 : 당신은 덮인 컬렉션에서 문서를 제거 할 수 없습니다.
-
==============================
2.N 삭제할 레코드 수하자.
N 삭제할 레코드 수하자.
db.collectionName.find().limit(N).forEach(doc => { db.collectionName.remove({_id:doc._id}) } )
-
==============================
3.컬렉션의 myCollection 문서의 N 번호를 제거하려면 :
컬렉션의 myCollection 문서의 N 번호를 제거하려면 :
db.getCollection('myCollection').find({}).limit(N).forEach(function(doc){ db.getCollection('myCollection').remove({_id: doc._id}); })
-
==============================
4.또 다른 방법은 파이썬 스크립트를 작성하는 것입니다.
또 다른 방법은 파이썬 스크립트를 작성하는 것입니다.
from pymongo import MongoClient def main(): local_client = MongoClient() collection = local_client.database.collection cursor = collection.find() total_number_of_records = 10000 for document in cursor: id = document.get("_id") if total_number_of_records == 100: break delete_query = {"_id": id} collection.delete_one(delete_query) total_number_of_records -= 1 if __name__ == "__main__": # execute only if run as a script main()
-
==============================
5.쿼리 SQL IS
쿼리 SQL IS
db.order.find({"业务员姓名" : "吊炸天"},{"业务员编号":0}).sort({ "订单时间" : -1 })
결과는
{ "_id" : ObjectId("5c9c875fdadfd961b4d847e7"), "推送ID" : "248437", "订单时间" : ISODate("2019-03-28T08:35:52Z"), "订单状态" : "1", "订单编号" : "20190328163552306694", "业务员姓名" : "吊炸天" } { "_id" : ObjectId("5c9c875fdadfd961b4d847e8"), "推送ID" : "248438", "订单时间" : ISODate("2019-03-28T08:35:52Z"), "订单状态" : "1", "订单编号" : "20190328163552178132", "业务员姓名" : "吊炸天" } { "_id" : ObjectId("5c9c875fdadfd961b4d847e5"), "推送ID" : "248435", "订单时间" : ISODate("2019-03-28T08:35:51Z"), "订单状态" : "1", "订单编号" : "20190328163551711074", "业务员姓名" : "吊炸天" } { "_id" : ObjectId("5c9c875fdadfd961b4d847e6"), "推送ID" : "248436", "订单时间" : ISODate("2019-03-28T08:35:51Z"), "订单状态" : "1", "订单编号" : "20190328163551758179", "业务员姓名" : "吊炸天" }
이제 3 개, 4 데이터를 삭제
var name = ["吊炸天"] var idArray = db.order.find({"业务员姓名" : {$in:name}},{"订单编号":1,}) .sort({ "订单时间" : -1 }) .skip(2) .map(function(doc){return doc.订单编号}) db.order.deleteMany({"订单编号":{$in:idArray}})
반환 결과는
{ "acknowledged" : true, "deletedCount" : 2 }
-
==============================
6.쿼리 아래 찾아 컬렉션에서 최신 10 개 문서를 삭제합니다 -
쿼리 아래 찾아 컬렉션에서 최신 10 개 문서를 삭제합니다 -
db.collectionsname.findAndModify({ query: { 'status':0 }, sort: { 'timestamp': -1 }, limit: 10, remove: true });
from https://stackoverflow.com/questions/19065615/how-to-delete-n-numbers-of-documents-in-mongodb by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의 서버를 시작할 수 없습니다 : 기본 스토리지 엔진 'wiredTiger은'mongod의이 빌드에 사용할 수 없습니다 (0) | 2019.12.07 |
---|---|
[MONGODB] 명시 적으로 이름을 지정하지 않고 MongoDB의에서 모든 필드의 값을 검색 (0) | 2019.12.07 |
[MONGODB] 몽구스 / MongoDB의 쿼리는 조인 ..하지만 난 SQL 배경에서 온 (0) | 2019.12.07 |
[MONGODB] 리눅스에서 MongoDB를 얻기 원격 연결을 청취하기 (0) | 2019.12.07 |
[MONGODB] 어떻게하여 MongoDB에 대소 문자를 구분하지 쿼리를해야합니까? (0) | 2019.12.07 |