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

Mongoose:Truyền tới ObjectId không thành công cho giá trị

Ví dụ từ tài liệu mongoose mà bạn đã tham chiếu sử dụng Number cho personSchema._id trường và ObjectId cho những người khác.

Tôi cho rằng họ làm điều này trong ví dụ chỉ để chứng minh rằng có thể sử dụng cả hai. Nếu bạn không chỉ định _id trong lược đồ, ObjectId sẽ là mặc định.

Tại đây, tất cả các bản ghi của bạn đều có _id trường là một ObjectId , nhưng bạn đang coi chúng như những con số. Hơn nữa, các trường như personIDtaskID không tồn tại, trừ khi bạn bỏ qua phần mà bạn xác định chúng.

Nếu bạn muốn sử dụng số cho tất cả _id của mình , bạn phải xác định trường đó trong lược đồ.

var newsSchema = new Schema({
  _id: Number,
  _creator: {type: ObjectId, ref: "Person"},
  // ...
})

var personSchema = new Schema({
  _id: Number,
  // ...
})

Sau đó, để tạo một mục tin tức với một ID cụ thể và gán nó cho người tạo:

var tony = new Person({_id: 0});
var newsItem = new NewsItem({_id: 0, creator: tony.id});

Tuy nhiên, điều cần lưu ý ở đây là khi bạn sử dụng thứ gì đó khác với ObjectId dưới dạng _id , bạn đang tự mình đảm nhận trách nhiệm quản lý những giá trị này. ObjectIds được tạo tự động và không cần quản lý thêm.

Chỉnh sửa:Tôi cũng nhận thấy rằng bạn đang lưu trữ các tham chiếu ở cả hai phía của các hiệp hội của bạn. Điều này hoàn toàn hợp lệ và đôi khi bạn có thể muốn làm điều đó, nhưng lưu ý rằng bạn phải tự lưu trữ các tham chiếu trong pre móc.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Chỉ tìm nạp các tài liệu được tạo trong 24 giờ qua?

  2. Sự cố Mongoose / MongoDB rất lạ khi chạy trang MEAN trên Openshift

  3. Tự động xóa các đối tượng tham chiếu khi xóa trong MongoDB

  4. Ứng dụng hoạt động trong quá trình phát triển nhưng không hoạt động khi được triển khai cho heroku

  5. Cách tìm nạp bản ghi từ mongodb bằng trường _id và hiển thị bản ghi đã tìm nạp trong bảng điều khiển bằng java