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

Không thể sử dụng $ nhân với Number

Bạn không thể tham chiếu các thuộc tính của tài liệu hiện tại từ bên trong bản cập nhật (). Bạn sẽ phải lặp lại tất cả các tài liệu và cập nhật chúng hoặc sử dụng tổng hợp với $multiply biểu thức dưới dạng một phép toán số học tổng hợp trong $project đường ống để nhân num_tires trường với hằng số:

db.cars.aggregate([
     { 
         $match: { 
            make: 'Honda'
         } 
     },
     { 
          $project: { 
              make: 1, 
              model: 1, 
              num_tires: 1, 
              price: { 
                   $multiply: [ "$num_tires", 500 ] 
              } 
         } 
    }
]) 

Hoặc bạn có thể cập nhật giản đồ của mình để bao gồm một trường tùy ý unit_price: {type: Number, default: 500} sau đó bạn có thể sử dụng làm $multiply: [ "$num_tires", "$unit_price" ] trong $project đường ống dẫn.

Một giải pháp thay thế khác là lặp lại tất cả các tài liệu phù hợp và cập nhật bằng cách sử dụng phương pháp lưu như sau:

var Car = require('car');
Car.find({make: 'Honda'}).snapshot().forEach(
    function (e) {
        // update document, using its own properties
        e.price = e.num_tires * 500;

        // remove old property
        delete e.price;

        // save the updated document
        Car.save(e);
     }
);

Hoặc sử dụng $set nhà điều hành:

var Car = require('car');
Car.find().forEach(
    function (elem) {
        Car.update(
            {
                _id: elem._id,
                make: "Honda"
            },
            {
                $set: {
                    price: elem.num_tires * 500
                }
            },
            {multi: true},
            function(err) {
                 console.log("There's an error ", err);
            }
        );
    }
);

Nếu bạn có giá trị mặc định cho giá bằng num_tires , thì bạn có thể chỉ cần cập nhật price trường mà không tham chiếu đến trường khác trong cùng một tài liệu, hãy sử dụng $mul nhà điều hành:

var Car = require('car');
Car.update(
    {make: 'Honda'},
    {$mul: {price: 500}},
    {multi: true},
    function(err) {
       console.log("There's an error ", err);
    }
});



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để xóa thuộc tính của đối tượng lồng nhau khỏi tài liệu MongoDB?

  2. Cách cập nhật mục từ mảng được lồng trong mảng

  3. Trình điều khiển mongo c:Làm thế nào để truy vấn tài liệu với _id trong danh sách?

  4. MongoDb:tìm đối tượng lồng nhau sâu với $ lookup

  5. Tìm tài liệu trống trong cơ sở dữ liệu