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

Nếu giá trị của một thuộc tính là null khi cập nhật thì thuộc tính đó sẽ không được thêm vào bản ghi

Tôi sẽ không viết theo cách này, nhưng tôi sẽ cho bạn biết tại sao mã của bạn không thành công.

Vấn đề là khối $ set của bạn

Bạn đang chọn đặt giá trị cụ thể cho đối tượng cập nhật được truyền vào. Nếu giá trị là undefined bạn đang buộc mongo đặt điều đó thành null .

Đây là vấn đề

ví dụ, trong DB:

{
    "_id" : ObjectId("ns8f9yyuo32hru0fu23oh"),
    "name" : "firstTest",
    "nickname": "jack",
    "__v" : 0
}

NẾU bạn vượt qua testToUpdate = { name: 'foo' } bạn sẽ kết thúc với

 Test.update({ ... }, { $set: { name: 'foo', nickname: undefined }}

vì bạn đang nhận được updatedValues.nickname ngoài các đối số và đối số không được xác định

Những gì bạn muốn

Test.update({ ... }, { $set: updatedValues }

được dịch sang

Test.update({ ... }, { $set: { name: 'foo' } }

Bạn không còn cung cấp khóa cho biệt hiệu, do đó không đặt biệt hiệu thành không xác định / null.

Tôi sẽ sử dụng một plugin mongoose và không phải lo lắng về việc chuyển các trường theo cách thủ công vào mô hình của bạn (xem github.com/autolotto/mongoose-model-update )

  • Bạn có thể xác định các trường có thể cập nhật và sau đó bạn chỉ có thể thực hiện model.update(req.body) và đừng lo lắng về tất cả những điều này
  • Ngay cả khi bạn không muốn sử dụng plugin, bạn vẫn có thể thực hiện Test.findByIdAndUpdate(id, { name, nickname }, callback)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. LỖI:quy trình con không thành công, đã thoát với lỗi số 48

  2. Cách hiển thị hình ảnh đã tải lên trong Keystonejs back-end

  3. Nhiều số lượng với một truy vấn duy nhất trong mongodb

  4. Mongoose - Tìm kiếm văn bản trong ba trường dựa trên điểm số hoặc trọng số

  5. Tệp cấu hình MongoDB Yaml Không được công nhận Tùy chọn:Bộ nhớ