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

Cập nhật bằng biểu thức thay vì giá trị

Tôi vừa bắt gặp điều này trong khi tìm kiếm MongoDB tương đương với SQL như thế này:

update t
set c1 = c2
where ...

Sergio đúng là bạn không thể tham chiếu thuộc tính khác dưới dạng giá trị trong một bản cập nhật trực tiếp. Tuy nhiên, db.c.find(...) trả về con trỏ và con trỏ đó có forEach phương pháp :

Vì vậy, bạn có thể nói những điều như sau:

db.QUESTIONS.find({}, {_id: true, i_up: true, i_down: true}).forEach(function(q) {
    db.QUESTIONS.update(
        { _id: q._id },
        { $set: { i_pp: q.i_up * 100 - q.i_down * 20 } }
    );
});

để cập nhật chúng lần lượt mà không cần rời khỏi MongoDB.

Nếu bạn đang sử dụng trình điều khiển để kết nối với MongoDB thì sẽ có một số cách để gửi một chuỗi JavaScript vào MongoDB; ví dụ:với trình điều khiển Ruby, bạn sẽ sử dụng eval :

connection.eval(%q{
    db.QUESTIONS.find({}, {_id: true, i_up: true, i_down: true}).forEach(function(q) {
        db.QUESTIONS.update(
            { _id: q._id },
            { $set: { i_pp: q.i_up * 100 - q.i_down * 20 } }
        );
    });
})

Các ngôn ngữ khác cũng phải tương tự.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Toán tử gần đối với lỗi trả về điểm geojson khi maxdistance được sử dụng trong truy vấn

  2. Mongoose insert

  3. Làm cách nào để triển khai lược đồ này trong MongoDB?

  4. Làm cách nào để tôi có thể yêu cầu MongoDB đánh giá một số JavaScript để nhận được giá trị cho một trường?

  5. Truy vấn MongoDB chậm