Xóa bởi _id trong bảng điều khiển MongoDB


136

Trong bảng điều khiển MongoDB, làm cách nào để xóa bản ghi theo id? Đây là bộ sưu tập của tôi:

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

Và đây là những lệnh tôi đã thử mà không hoạt động:

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")});

Xóa theo tên hoạt động:

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

Đây là trong trình duyệt trình duyệt trên mongodb.org nếu điều đó làm cho bất kỳ sự khác biệt

Cảm ơn


Không có giải pháp nào hiệu quả với tôi cho đến khi tôi thêm một cuộc gọi lại: db.test_users.remove ({"_id": '4d512b45cc9374271b02ec4f'}, hàm (err, data) {});
rttmax

Câu trả lời:


271

Rất gần. Điều này sẽ làm việc:

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

tức là bạn không cần một cái mới cho ObjectId.

Ngoài ra, lưu ý rằng trong một số trình điều khiển / công cụ, remove()bây giờ bị phản đối và deleteOnehay deleteManynên được sử dụng để thay thế.


4
nó cũng sẽ hoạt động mà không có dấu ngoặc kép quanh _id db.test_users.remove ({_id: ObjectId ("4d512b45cc9374271b02ec4f")});
alfonsodev

Tôi đã thử điều này: TimeAndSpace.remove ({"_id": ObjectId ("8Bd2dZ778LXejYNrL")}); ... và tôi đã nhận được, "Uncaught ReferenceError: ObjectId không được xác định tại <nặc danh>: 2: 13"
B. Clay Shannon

@BClay ID đối tượng mong đợi đầu vào thập lục phân (có thể cả chữ thường) vì vậy nó không thành công trên các ký tự X, Z trong số các ký tự khác.
Nic Cottrell

2
Điều này thật vô lý.
Guy

Nếu _idtrường không được tạo tự động (nghĩa là nó không phải là ObjectId, mà là Chuỗi), bạn chỉ có thể viết giá trị của _iddấu ngoặc kép : db.your.database.remove({"_id": "your value"}).
Aleksandar

16

Câu trả lời là bảng điều khiển / shell web tại mongodb.org hoạt động khác nhau và không như tôi mong đợi. Một phiên bản cài đặt tại nhà hoạt động hoàn hảo mà không có vấn đề tức là; _id được tạo tự động trên vỏ web đã được lưu như thế này:

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

Thiết lập tài liệu tương tự ở nhà và tự động tạo _id đã được lưu như thế này:

"_id" : ObjectId("4d5192665777000000005490")

Truy vấn làm việc chống lại sau này mà không có vấn đề.


1
Bạn có chắc chắn rằng chúng được lưu khác nhau trong tài liệu BSON không? Những khác biệt đó trông giống như khách hàng chỉ định dạng đầu ra khác nhau.
Nic Cottrell

13

Chà, _id là một đối tượng trong ví dụ của bạn, vì vậy bạn chỉ cần truyền một đối tượng

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

Điều này sẽ làm việc

Chỉnh sửa: Đã thêm paren trailing để đảm bảo rằng nó được biên dịch.


Tôi cũng đã thử nó không xóa bản ghi: db.test_users.remove ({"_id": {"$ oid": "4d513345cc9374271b02ec6c"}}); ps: đã cập nhật câu hỏi để hiển thị điều này
Typo Johnson

Trong câu hỏi của bạn, bạn đã nói rằng bạn đã thử điều này: db.test_users.remove ({"_id": {"$ oid": new ObjectId ("4d512b45cc9374271b02ec4f")}});
Dmitri

Có tôi vừa cập nhật câu hỏi cảm ơn, tôi đã thử cả hai và không hoạt động. Có lẽ điều này là do bạn không thể xóa trên một thuộc tính phụ?
Typo Johnson

sử dụng cách đó trả về "toán tử không xác định: $ oid"
Arman Ortega

13

Nếu bạn muốn xóa bằng danh sách ID thì điều này hoạt động rất tốt.

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

6

Bạn có nhiều nút mongodb trong một bộ bản sao không?

Tôi đã tìm thấy (Tôi đang sử dụng qua Robomongo gui mongo shell, tôi đoán tương tự áp dụng trong các trường hợp khác) rằng cú pháp loại bỏ chính xác, nghĩa là

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

... không hoạt động trừ khi bạn được kết nối với nút chính của bộ bản sao.


4

Bản thân tôi đã va vào điều này và biến thể này có hiệu quả với tôi:

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

4

đầu tiên hãy lấy hàm ObjectID từ mongodb ObjectId = quiries (mongodb) .ObjectID;

sau đó bạn có thể gọi _id bằng chức năng xóa

"_id": ObjectId ("4d5192665777000000005490")


2

Mặc dù bài đăng này đã lỗi thời, bộ sưu tập.remove không được dùng nữa! collection.delete_onenên được sử dụng thay thế!

Thông tin chi tiết có thể được tìm thấy ở đây dưới #remove


1

Giả sử chúng ta có bộ sưu tập giả này:

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

chỉ cần sử dụng:

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

nó sẽ bị xóa với điều này như là một phản ứng:

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

Đó là nó.


0

Giải pháp và ví dụ:

1- C: \ MongoDB \ Server \ 3.2 \ bin> mongo (chưa ban hành lệnh vì bạn chưa được kết nối với bất kỳ cơ sở dữ liệu nào, bạn chỉ được kết nối với máy chủ cơ sở dữ liệu mongodb).

2-

hiển thị dbs analytics_database 0.000GB cục bộ 0.000GB test_database 0.000GB

3-

sử dụng test_database chuyển sang db test_database

4-

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

bây giờ bạn thấy WriteResult ({"nRemond": 1}) là 1 chứ không phải 0.

Làm xong.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.