Hướng dẫn how to store user specific data in mongodb - cách lưu trữ dữ liệu cụ thể của người dùng trong mongodb

Tôi muốn lưu trữ dữ liệu dành riêng cho người dùng cho một tài liệu.

Có một bộ sưu tập Task chứa thông tin chung nhưng cũng nên chứa thông tin dành riêng cho người dùng. Khi truy vấn các máy khách API chỉ nên lấy thông tin chung và thông tin cụ thể cho người dùng yêu cầu.

Tôi nghĩ về các cách tiếp cận khác nhau và cuối cùng đã kết thúc với hai cách tiếp theo. Vui lòng chia sẻ ý kiến ​​và đề xuất của bạn cho loại vấn đề này bởi vì tôi nghĩ đó là một vấn đề phổ biến.

Cảm ơn bạn.

A - Mảng nhúng

  • Tasks chứa một mảng các subdocument có chứa cài đặt cho mỗi người dùng
  • Trước khi trả về một tác vụ, mảng sẽ được thay thế bằng đối tượng dành riêng cho người dùng hoặc đối tượng sẽ được hợp nhất với chính tác vụ (tôi thích cái đầu tiên để mọi người có thể thấy các trường nào là dành riêng cho người dùng)

Thí dụ

// Task
{
  "title": "brush your teeth",
   ...
  "user_based": [
    {
      "user": "54182b021a944f9c18897642",
      "context": "Work",
      "remind": "2014-09-16T12:41:16.412Z",
      "last_access": "2014-09-16T12:41:16.412Z"
       ...
    }
  ]
}

Các vấn đề

  • Tính toán (so sánh) và thao tác là cần thiết
  • Mongoose hỗ trợ một cách để thao tác các đối tượng trước khi chúng được gửi nhưng nó không thể được sử dụng ở đây vì người dùng không rõ tại thời điểm đó

B - usertask -thu thập

  • Tasks chứa thông tin chung
  • UserTasks chứa thông tin dành riêng cho người dùng và tham khảo Task
  • UserTasks được truy vấn và giải quyết Task như một Subdoc có

Thí dụ

// Task
{
  "title": "brush your teeth",
  ...
}

// UserTask
{
  "task": "54282b021a944f9c18897642",
  "context": "Work",
  "remind": "2014-09-16T12:41:16.412Z",
  "last_access": "2014-09-16T12:41:16.412Z"
   ...
}

Các vấn đề

  • Tính toán (so sánh) và thao tác là cần thiết
  • Mongoose hỗ trợ một cách để thao tác các đối tượng trước khi chúng được gửi nhưng nó không thể được sử dụng ở đây vì người dùng không rõ tại thời điểm đó
  • B - usertask -thu thập

Tasks chứa thông tin chungSep 16, 2014 at 13:20

Hướng dẫn how to store user specific data in mongodb - cách lưu trữ dữ liệu cụ thể của người dùng trong mongodb

UserTasks chứa thông tin dành riêng cho người dùng và tham khảo TaskK. D.

UserTasks được truy vấn và giải quyết Task như một Subdoc có8 gold badges42 silver badges69 bronze badges

Yêu cầu giải quyết tài liệu tham khảo

Sự không nhất quán có thể xảy ra nếu UserTasks tồn tại mà không có Task

A Task không thể tồn tại mà không có

// Task
{
  "title": "brush your teeth",
  ...
}

// UserTask
{
  "task": "54282b021a944f9c18897642",
  "context": "Work",
  "remind": "2014-09-16T12:41:16.412Z",
  "last_access": "2014-09-16T12:41:16.412Z"
   ...
}
4 được tạo ra nguyên nhân gây ra các vấn đề khác

var getTask = function(req, res, next) {
    Task.findById(req.params.id, function(err, task) {
        if (err) ...
        UserTask.findOne({
            user: req.user._id,
            task: task._id
        }, function(err, userTask) {
            task.userTask = userTask;
            res.json(task);
        })
    })
};

Đã hỏi ngày 16 tháng 9 năm 2014 lúc 13:20

K. D.K. D.Sep 16, 2014 at 14:02

Hướng dẫn how to store user specific data in mongodb - cách lưu trữ dữ liệu cụ thể của người dùng trong mongodb

3,8918 Huy hiệu vàng42 Huy hiệu bạc69 Huy hiệu đồng

Theo tôi, cách tiếp cận B phù hợp hơn với những gì bạn muốn hoàn thành.

Vì một yêu cầu nhiệm vụ chỉ nên trả về thông tin chung và dữ liệu cụ thể của người dùng yêu cầu, bạn sẽ dễ dàng hơn trong một bộ sưu tập riêng biệt so với nếu nó được chứa trong một mảng lồng nhau. Vấn đề với dữ liệu không nhất quán luôn có thể được giải quyết với một số móc nối Presave và Preremove để đảm bảo một nhiệm vụ có ít nhất một nhiệm vụ người dùng và nhiệm vụ người dùng luôn được kết nối với một tác vụ.

// loading all tasks for a user
router.get('/users/:id/tasks', function(req, res, next) {
  UserTask.find({_user: req.params.id})
    .populate('_tasks')
    .exec(function(err, tasks) {
      if(err) return next(err);
      res.json(tasks)
  })
})

Vấn đề với cách tiếp cận A sẽ cần nhiều mã hơn để trích xuất dữ liệu cụ thể của người dùng từ mảng lồng nhau và trả lại cho người dùng, với cách tiếp cận B, điều này sẽ khá đơn giản và thực sự khá thanh lịch, hãy để tôi cho bạn một ví dụ:Sep 16, 2014 at 14:11

Hướng dẫn how to store user specific data in mongodb - cách lưu trữ dữ liệu cụ thể của người dùng trong mongodb

Hãy cho tôi biết nếu điều này có ý nghĩa.Matt Roman

Đã trả lời ngày 16 tháng 9 năm 2014 lúc 14:024 silver badges8 bronze badges

Người dùng được lưu trữ ở đâu trong MongoDB?

Đối với người dùng được tạo trong MongoDB, MongoDB lưu trữ tất cả thông tin người dùng, bao gồm tên, mật khẩu và cơ sở dữ liệu xác thực của người dùng, trong bộ sưu tập System.users trong cơ sở dữ liệu quản trị.in the system. users collection in the admin database.

Chúng ta có thể lưu trữ dữ liệu bằng MongoDB không?

Các đối tượng lớn, hoặc "tệp", dễ dàng được lưu trữ trong MongoDB.Không có vấn đề gì để lưu trữ video 100MB trong cơ sở dữ liệu.Điều này có một số lợi thế so với các tệp được lưu trữ trong một hệ thống tệp.Không giống như một hệ thống tệp, cơ sở dữ liệu sẽ không gặp vấn đề gì với hàng triệu đối tượng.. It is no problem to store 100MB videos in the database. This has a number of advantages over files stored in a file system. Unlike a file system, the database will have no problem dealing with millions of objects.

Chúng ta có thể tạo nhiều lược đồ trong MongoDB không?

Mặc dù, MongoDB hỗ trợ xác thực lược đồ, nhưng nó sẽ xác nhận tất cả các tài liệu trong một bộ sưu tập so với cùng một lược đồ.Điều đó có nghĩa là, bạn không thể có nhiều lược đồ cho một bộ sưu tập duy nhất.you can not have multiple schemas for a single collection.

Có thể xử lý bao nhiêu mục của MongoDB?

MongoDB hỗ trợ không quá 100 cấp độ làm tổ cho các tài liệu BSON.Mỗi đối tượng hoặc mảng thêm một cấp độ.no more than 100 levels of nesting for BSON documents. Each object or array adds a level.