MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Mongodb không thể truy vấn tài liệu con theo ID (trả về null)

Bạn không truy vấn một ObjectId, bất kể bạn nghĩ mình là ai. Bạn đang truy vấn cho ObjectId được mã hóa dưới dạng chuỗi đặc biệt, điều này không điều tương tự. Đánh máy đúng cách và bạn có thể sẽ thành công hơn nhiều.

Đã chỉnh sửa để xây dựng chi tiết, từ một trình bao REPL mongo (JS):

> // Omitting the _id, or generating a new one, are equivalent during insert.
> db.foo.insert({_id: ObjectId()})
WriteResult({ "nInserted" : 1 })

> db.foo.find()  // As expected, we get back our _real_ ObjectId value.
{ "_id" : ObjectId("5c9cfab873724727778c0730") }

> // Can we "insert the record again" using a string version of the ID?
> db.foo.insert({_id: "5c9cfab873724727778c0730"})
WriteResult({ "nInserted" : 1 })  // Sure as heck can! No unique violation!

> db.foo.find()  // Because THESE ARE NOT THE SAME
{ "_id" : ObjectId("5c9cfab873724727778c0730") }
{ "_id" : "5c9cfab873724727778c0730" }

Sau cuộc thảo luận IRC của chúng tôi, dường như có khó khăn trong việc hiểu "các thuật ngữ có thể tìm kiếm" trong các câu trả lời mà bạn đang được cung cấp. Tìm kiếm tại đây trên StackOverflow (hoặc Google hoặc DDG) cho "mongoose typecast ObjectId" (không có dấu ngoặc kép; hoặc chỉ "mongoose ObjectId"…) và bạn sẽ tìm thấy nhiều câu trả lời, vì đây là vấn đề đặc biệt phổ biến đối với người dùng Mongoose.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - Cách chỉ chọn chuỗi số / Kiểm tra xem chuỗi có phải là số trong mongo-shell hay không

  2. Kết xuất mẫu không chuyển biến tổng hợp pymongo sang mẫu

  3. Lỗi:kết nối ETIMEDOUT khi cạo

  4. Không thể chạy robomongo.sh bằng sh robomongo.sh trong Ubuntu 14.04

  5. tạo logic bên trong Spring Batch bằng Tasklet hoặc bên trong CompositeItemWriter?