ลบโดย _id ในคอนโซล MongoDB


143

ในคอนโซล MongoDB ฉันจะลบเร็กคอร์ดด้วย id ได้อย่างไร? นี่คือคอลเล็กชันของฉัน:

[ 
  {
     "_id" : { "$oid" : "4d512b45cc9374271b02ec4f" },
     "name" : "Gazza"
  },
  {
     "_id" : { "$oid" : "4d513345cc9374271b02ec6c" },
     "name" : "Dave",
     "adminOf" : { },
     "email" : "email@email.com"
  }
]

และนี่คือคำสั่งที่ฉันลองแล้วไม่ได้ผล:

db.test_users.remove( {"_id":{"$oid":new ObjectId("4d512b45cc9374271b02ec4f")}});
db.test_users.remove( {"_id":{"$oid":"4d513345cc9374271b02ec6c"}});
db.test_users.remove( {"_id":"4d512b45cc9374271b02ec4f"});
db.test_users.remove( {"_id":new ObjectId("4d512b45cc9374271b02ec4f")});

การลบตามชื่อใช้งานได้:

db.test_users.remove( {"name":"Gazza"});

สิ่งนี้อยู่ในเชลล์ของเบราว์เซอร์ที่mongodb.orgหากสิ่งนั้นสร้างความแตกต่าง

ขอบคุณ


ไม่มีวิธีแก้ปัญหาใดที่ใช้ได้ผลสำหรับฉันจนกว่าฉันจะเพิ่มการโทรกลับ: db.test_users.remove ({"_id": '4d512b45cc9374271b02ec4f'}, ฟังก์ชัน (err, data) {});
rttmax

คำตอบ:


280

ใกล้มาก. สิ่งนี้จะได้ผล:

db.test_users.deleteOne( {"_id": ObjectId("4d512b45cc9374271b02ec4f")});

กล่าวคือคุณไม่ต้องการสิ่งใหม่สำหรับ ObjectId

นอกจากนี้ยังทราบว่าในบางไดรเวอร์ / เครื่องมือremove()จะเลิกในขณะนี้และdeleteOneหรือdeleteManyควรจะนำมาใช้แทน


4
มันจะใช้งานได้โดยไม่มีเครื่องหมายคำพูดรอบ _id db.test_users.remove ({_id: ObjectId ("4d512b45cc9374271b02ec4f")});
alfonsodev

ฉันลองสิ่งนี้: TimeAndSpace.remove ({"_id": ObjectId ("8Bd2dZ778LXejYNrL")}); ... และฉันได้รับ "Uncaught ReferenceError: ObjectId ไม่ได้กำหนดไว้ที่ <anonymous>: 2: 13"
B. Clay Shannon

@BClay ID อ็อบเจ็กต์ต้องการอินพุตเลขฐานสิบหก (อาจเป็นตัวพิมพ์เล็กด้วย) ดังนั้นจึงล้มเหลวในอักขระ X, Z ท่ามกลางตัวอื่น ๆ
Nic Cottrell

2
นี่เป็นเรื่องไร้สาระ
กาย

หาก_idข้อมูลไม่ได้ถูกสร้างขึ้นโดยอัตโนมัติ (คือมันไม่ได้เป็นสภาพ ObjectID แต่ String) คุณก็สามารถเขียนค่าของภายใต้เครื่องหมายคำพูด:_id db.your.database.remove({"_id": "your value"})
Aleksandar

16

คำตอบคือเว็บคอนโซล / เชลล์ที่ mongodb.org ทำงานแตกต่างกันและไม่เป็นไปตามที่ฉันคาดไว้ เวอร์ชันที่ติดตั้งที่บ้านทำงานได้อย่างสมบูรณ์โดยไม่มีปัญหาเช่น; _id ที่สร้างขึ้นโดยอัตโนมัติบนเว็บเชลล์ได้รับการบันทึกดังนี้:

"_id" : { "$oid" : "4d512b45cc9374271b02ec4f" },

การตั้งค่าเอกสารเดียวกันที่บ้านและ _id ที่สร้างขึ้นอัตโนมัติถูกบันทึกไว้ดังนี้:

"_id" : ObjectId("4d5192665777000000005490")

การสืบค้นสามารถทำได้โดยไม่มีปัญหา


1
แน่ใจหรือว่าบันทึกต่างกันในเอกสาร BSON ความแตกต่างเหล่านั้นดูเหมือนว่าไคลเอ็นต์จะจัดรูปแบบผลลัพธ์ให้แตกต่างกัน
Nic Cottrell

14

_id เป็นวัตถุในตัวอย่างของคุณดังนั้นคุณต้องส่งผ่านวัตถุ

'db.test_users.remove({"_id": { "$oid" : "4d513345cc9374271b02ec6c" }})'

สิ่งนี้ควรใช้งานได้

แก้ไข: เพิ่มพาเรนต่อท้ายเพื่อให้แน่ใจว่าคอมไพล์


ฉันพยายามแล้วเหมือนกัน แต่ก็ไม่ได้ลบบันทึก: db.test_users.remove ({"_id": {"$ oid": "4d513345cc9374271b02ec6c"}}); ps: อัปเดตคำถามเพื่อแสดงสิ่งนี้
Typo Johnson

ในคำถามของคุณคุณบอกว่าคุณได้ลองสิ่งนี้: db.test_users.remove ({"_id": {"$ oid": new ObjectId ("4d512b45cc9374271b02ec4f")}});
Dmitri

ใช่ตอนนี้ฉันอัปเดตคำถามแล้วขอบคุณฉันลองทั้งสองอย่างแล้วและไม่ได้ผล อาจเป็นเพราะคุณไม่สามารถลบในคุณสมบัติย่อย?
Typo Johnson

การใช้วิธีนี้จะส่งคืน "ตัวดำเนินการที่ไม่รู้จัก: $ oid"
Arman Ortega

14

หากคุณต้องการลบด้วยรายการรหัสนี้ใช้งานได้ดี

db.CollectionName.remove({
    "_id": {
        $in: [
            ObjectId("0930292929292929292929"),
            ObjectId("0920292929292929292929")
        ]
     }
}) 

6

คุณมีโหนด mongodb หลายโหนดในชุดจำลองหรือไม่?

ฉันพบ (ฉันใช้ผ่าน Robomongo gui mongo shell ฉันเดาว่าเหมือนกันในกรณีอื่น ๆ ) ว่าไวยากรณ์การลบที่ถูกต้องเช่น

db.test_users.remove({"_id": ObjectId("4d512b45cc9374271b02ec4f")})

... ไม่ทำงานเว้นแต่คุณจะเชื่อมต่อกับโหนดหลักของชุดข้อมูลจำลอง


5

ฉันเพิ่งเจอสิ่งนี้ด้วยตัวเองและรูปแบบนี้ใช้ได้กับฉัน:

db.foo.remove({**_id**: new ObjectId("4f872685a64eed5a980ca536")})

5

ก่อนอื่นให้รับฟังก์ชัน ObjectID จาก mongodb ObjectId = ต้องใช้ (mongodb) .ObjectID;

จากนั้นคุณสามารถเรียก _id ด้วยฟังก์ชันลบ

"_id": ObjectId ("4d5192665777000000005490")


2

แม้ว่าโพสต์นี้จะล้าสมัย แต่collection.remove ก็เลิกใช้งานแล้ว! collection.delete_oneควรใช้แทน!

สามารถดูข้อมูลเพิ่มเติมได้ที่ #remove


2

สมมติว่าเรามีคอลเลกชันจำลองนี้:

{ "_id" : ObjectId("5ea53fedaa79db20d4e14284"), "item" : "planner", "qty" : 75 }

เพียงใช้:

db.inventory.deleteOne({ _id: ObjectId("5ea53fedaa79db20d4e14284") })

มันจะถูกลบโดยเป็นการตอบกลับ:

{ "acknowledged" : true, "deletedCount" : 1 }

แค่นั้นแหละ.


0

แนวทางแก้ไขและตัวอย่าง:

1- C: \ MongoDB \ Server \ 3.2 \ bin> mongo (อย่าออกคำสั่งเนื่องจากคุณยังไม่ได้เชื่อมต่อกับฐานข้อมูลใด ๆ คุณจะเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูล mongodb เท่านั้น)

2-

แสดง dbs analytics_database 0.000GB local 0.000GB test_database 0.000GB

3-

ใช้ test_database เปลี่ยนเป็น db test_database

4-

db.Collection.remove ({"_ id": ObjectId ("5694a3590f6d451c1500002e")}, 1); WriteResult ({"nRemoved": 1})

ตอนนี้คุณเห็น WriteResult ({"nRemoved": 1}) เป็น 1 ไม่ใช่ 0

เสร็จแล้ว


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.