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

MongoDB - nâng cấp liên quan đến danh sách

Bạn không thể kết hợp toán tử vị trí ("$") và một dấu thăng; "$" sẽ được coi là tên trường trong quá trình chèn. Bạn không thể thực hiện việc này đối với các tài liệu mới, chỉ tài liệu hiện có.

Tôi đã đề xuất một cấu trúc giống như thế này:

{"_id" : ObjectId("4c28f62cbf8544c60506f11d"),
"some_other_data":"goes here",
"trips": { 
    "2010-05-10":
       [{"lat":21.321231, "lng": 16.8783234, "updated_at": "Mon May 10 2010 15:24:35"}, 
        {"lat":21.321231, "lng": 16.8783234, "updated_at": "Mon May 10 2010 15:24:24"}],
    "2010-05-08": 
       [{"lat":21.324239, "lng": 16.8735234, "updated_at": "Mon May 8 2010 11:18:05"},
        {"lat":21.311234, "lng": 16.8743271, "updated_at": "Mon May 8 2010 11:17:55"}, 
        {"lat":21.321238, "lng": 16.8782219, "updated_at": "Mon May 8 2010 11:17:45"}]
    }
}

Sau đó, bạn có thể phát hành một bản cập nhật như sau:

db.mycollection.update({application_id: "MyTestApp", "trips.2010-05-10":{$exists:true}},
                       {$push: {"trips.2010-05-10": {lat:11, lng:11} }}, 
                       true);

kết quả là cái này sẽ được chèn.

> db.mycollection.find()
{ "_id" : ObjectId("4c2931d17b210000000045f0"), 
    "application_id" : "MyTestApp", 
    "trips" : { "2010-05-10" : [ { "lat" : 11, "lng" : 11 } ] } }

và chạy lại nó sẽ cung cấp cho bạn điều này:

> db.mycollection.find()
{ "_id" : ObjectId("4c2932db7b210000000045f2"), 
    "application_id" : "MyTestApp", 
    "trips" : { "2010-05-10" : 
        [ { "lat" : 11, "lng" : 11 }, 
          { "lat" : 11, "lng" : 11 } ] } }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tại sao mongodb không cung cấp cho tôi hơn 100 tài liệu?

  2. mongodb TTL không hoạt động

  3. Lệnh mongodump của Mongodb, lỗi thực thi javascript

  4. In ngày MongoDB từ PHP

  5. Làm cách nào để kết nối với máy chủ MongoDB bằng JAVA từ OpenShift?