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

Cách trả về các tài liệu con từ một đối tượng trong một mảng với Meteor và MongoDB

! ĐÃ GIẢI QUYẾT!

Vấn đề ở đây là tôi không biết gói aldeed:collection2 là gì đã làm với mã của tôi. Tôi đã thêm gói này để sử dụng OrionJS (đây là trang github ). Và tôi không nhận thấy rằng aldeed:collection2 này đang buộc xác thực tất cả các bản cập nhật của tôi. Tôi đã gặp phải vấn đề này trước đây, nhưng nó đã mang lại cho tôi một lỗi. Trong quá khứ, tôi đã có thể tìm ra lỗi. Lần này, không có lỗi ở bất cứ đâu. Nó sẽ cập nhật mảng, nhưng với một đối tượng trống. Thật khó hiểu. Tôi sẽ đăng vấn đề trên aldeed:collection2 trang dự án của.

Từ tài liệu dự án :"[ aldeed:collection2 là một gói] Meteor cho phép bạn đính kèm một lược đồ vào Mongo.Collection. Tự động xác thực dựa trên giản đồ đó khi chèn và cập nhật từ mã máy khách hoặc máy chủ. "

tài liệu để sửa lỗi, bạn có thể tìm thấy tại đây .

Giải pháp:

Vì tôi đang sử dụng aldeed:simple-schema aldeed:collection2 Tôi cần đảm bảo đính kèm một "Giản đồ" thích hợp vào bộ sưu tập của mình.

Như vậy:

Ideas.attachSchema(new SimpleSchema({
  // ... a bunch of other schema data

  // I was missing this:
  score: {
    type: [Object],
    optional: true,
    label: 'Score',
  },
  "score.$.userId": {
    type: String,
    optional: true,
    label: 'Score'
  },
  "score.$.score": {
    type: String,
    optional: true,
    label: 'Score'
  }

  // ... a bunch more schema data
});

Khắc phục sự cố:

Làm thế nào tôi tìm ra điều này?

Chà, tôi là người mới sử dụng MongoDB - vì vậy tôi không muốn truy cập bảng điều khiển và chỉ cố gắng thực hiện cập nhật từ đó. Trên thực tế, điều này thậm chí còn không xảy ra với tôi cho đến khi tôi nói chuyện với vợ mình.

Tôi đã thử mọi thứ, thêm dấu ngoặc kép xung quanh mọi thứ , nhìn vào mã của người khác. Tôi đã xem tất cả các tài liệu tuyệt vời của MongoDB. Tôi đã xem các video trên youtube. Tôi đã xem xét các giải pháp stackoverflow.com khác. Cuối cùng, tôi nhận ra rằng mã của những người khác trông giống hệt như mã của tôi và điều này sẽ hoạt động. Tôi thậm chí đã đăng ký trên Clarity.fm để đặt câu hỏi từ Sacha Greif với $ 1 một phút.

... Tôi bắt đầu nghĩ rằng cơ sở dữ liệu mongo của tôi không hoạt động. Có lẽ mongo của tôi cài đặt bị hỏng?

Vì vậy, được rồi, có một bài kiểm tra cho điều đó ... Sau hai ngày bị tra tấn này, cuối cùng nó đã đến với tôi - Chỉ cần thử cập nhật trong bảng điều khiển mongo ... (duh)

meteor:PRIMARY> db.ideas.update({_id:"DqEGjK3xSTBdpEgXa"}, {$addToSet: {score: {userId: "123456", score: 1}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
meteor:PRIMARY> db.ideas.find()
{
  "_id" : "DqEGjK3xSTBdpEgXa",
  "title" : "Revive Randolf With Bloodmagic",
  "body" : "Bring Randolf back from the dead using witche's bloodmagic.",
  "userId" : "Rz28ByKYM4Y8futFb",
  "author" : "Iryna Iglehart",
  "episodeId" : "iQaxyLPi5iaYtQngf",
  "timestamp" : ISODate("2016-06-08T17:37:57.237Z"),
  "score" : [
    {
      "userId" : "123456",
      "score" : 1
    }
  ],
  "overallScore" : 0,
  "votedOnBy" : [ ],
  "timesVotedOn" : 0
}

Sau khi tôi biết rằng mongo CÓ THỂ thực hiện cập nhật của tôi - tôi biết vấn đề liên quan đến thiết lập sao băng của tôi. Tôi đã tìm thấy một vấn đề trên sao băng bây giờ nếu đây là một vấn đề. Tôi đã tìm kiếm mọi góc tối của google để cố gắng tìm ra điều này.

Không lâu trước khi tôi nhớ ra mình đã gặp kỳ lạ các vấn đề xác thực trước đây. Ngoại trừ các vấn đề xác thực này luôn đi kèm với lỗi. Thực tế là không có lỗi và mảng được cập nhật đơn giản với các đối tượng trống thực sự khiến tôi phải lo lắng.

Những gì tôi đã học được:

  1. Nếu lúc đầu sao băng không thành công, hãy thử bảng điều khiển mongo ...
  2. Theo @David Weldon nhận xét của mình - một kỹ thuật gỡ lỗi tốt khác sẽ giúp ích cho tôi, mà tôi có thể đã thử từ lâu là bắt đầu một dự án sao băng mới và kiểm tra mã của tôi ở đó, sau đó thêm từng gói một và xem khi nào bất kỳ ai trong số họ phá vỡ mã. Thử nghiệm này sẽ chỉ ra rằng về cơ bản mã là chính xác và chỉ cần lược đồ đính kèm do có thêm gói.
  3. Đừng thêm gói một cách mù quáng. Hiểu nếu / khi các gói thay đổi quy trình phát triển, chẳng hạn như aldeed:collection2

Xin cảm ơn:

CẢM ƠN LỚN tới @Michel Floyd @David Weldon mọi sự giúp đỡ của bạn về vấn đề này.

Các liên kết quan trọng:

  1. Tôi đã học được khá nhiều điều từ những lỗi thường gặp được viết bởi @David Weldon
  2. tài liệu cho aldeed:collection2
  3. tài liệu cho aldeed:simple-schema
  4. Tìm kiếm "Tìm dữ liệu" trên hướng dẫn sao băng này - nó nói về fetch () và nó hữu ích như thế nào. Điều này đã giúp tôi trong quá trình khắc phục sự cố này.
  5. Xem lại tài liệu về cập nhật từ MongoDB
  6. Tài liệu MongoDB $ addToSet
  7. Tài liệu đẩy MongoDB $
  8. [Bộ sưu tập ví dụ Bios của MongoDB] ( https:// docs .mongodb.com / manual / reference / bios-example-collection /] - Sau khi xem xét các tài liệu như thế này, tôi thực sự nhận ra rằng không có gì sai trong thiết kế cơ sở dữ liệu của mình, nên có một cách nào đó để thực hiện điều này (và rõ ràng là có)

Câu hỏi liên quan:

[Đã giải quyết] Cách cập nhật một mảng tài liệu con trên bộ sưu tập MongoDB trong MeteorJS




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Trong Mongo, làm cách nào để so khớp tất cả các mục của bộ sưu tập với một mảng lớn hơn?

  2. Cách tải phiên bản mongodb từ mongoose

  3. mongorestore không thành công do BSONSize không hợp lệ

  4. MongoDB $ strcasecmp

  5. Các truy vấn không gian địa lý có hoạt động trên mảng không? ($ geoWithin, $ geoIntersects)