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

TypeError:callback.apply không phải là một hàm (Node.js &Mongodb)

Có 2 cách để cập nhật tài liệu trong mongodb:

  1. tìm tài liệu, đưa nó đến máy chủ, thay đổi nó, sau đó lưu nó trở lại mongodb.

  2. chỉ cần đưa ra hướng dẫn cho mongodb để tìm tài liệu, thay đổi nó; rồi cuối cùng sau khi mongodb hoàn tất, hãy trả về kết quả / lỗi dưới dạng gọi lại.

Trong mã của bạn, bạn đang kết hợp cả hai phương pháp.

  1. với user.save (), đầu tiên bạn tìm kiếm cơ sở dữ liệu với user.findOne và kéo nó đến máy chủ (nodejs), bây giờ nó nằm trong bộ nhớ máy tính của bạn. sau đó bạn có thể thay đổi dữ liệu theo cách thủ công và cuối cùng lưu nó vào mongodb với người dùng. save ()

    User.findOne({ userName: req.params.userName}, function(err, user) {
    
        if (err)
            res.send(err);
    
        //this user now lives in your memory, you can manually edit it
        user.username = "somename";
        user.competitorAnalysis.firstObservation = "somethingelse";
    
        // after you finish editing, you can save it to database or send it to client
         user.save(function(err) {
            if (err)
                return res.send(err);
    
            return res.json({ message: 'User updated!' });
        });
    
  2. cách thứ hai là sử dụng User.findOneAndUpdate () .. Điều này được ưu tiên, thay vì user.findOne () thì user.update (); bởi vì những người này về cơ bản tìm kiếm cơ sở dữ liệu hai lần. đầu tiên để findOne () và tìm kiếm lại để cập nhật ()

Dù sao, phương pháp thứ hai là yêu cầu mongodb cập nhật dữ liệu mà không cần đưa đến máy chủ trước, Tiếp theo, chỉ sau khi mongodb hoàn thành hành động của nó, bạn sẽ nhận được tệp cập nhật (hoặc lỗi) dưới dạng gọi lại

User.findOneAndUpdate({ userName: req.params.userName}, 
            {
             $set: { "competitorAnalysis.firstObservation" : req.body.firstObservation,
                      "competitorAnalysis.secondObservation" : req.body.secondObservation,
                      "competitorAnalysis.thirdObservation" : req.body.thirdObservation,
                      "competitorAnalysis.brandName" : req.body.brandName,
                      "competitorAnalysis.productCategory" : req.body.productCategory
            } },
            { upsert: true },
        function(err, user) {
        //after mongodb is done updating, you are receiving the updated file as callback    

        // now you can send the error or updated file to client
        if (err)
            res.send(err);

        return res.json({ message: 'User updated!' });
        });


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bộ sưu tập Mongodb tổng số giờ thu thập

  2. Loại trừ các trường khỏi kết quả trong MongoDB mon

  3. Kết nối MongoDB từ Ứng dụng dựa trên thiết bị di động hoặc trình duyệt

  4. Chỉ định một Bộ sưu tập được chia nhỏ với Dữ liệu Mùa xuân MongoDB

  5. Bao gồm tất cả các trường hiện có và thêm các trường mới vào tài liệu