2012-01-15 15 views
6

Tôi tự hỏi nếu có cách nào để thực hiện cập nhật tự tham chiếu trong MongoDB, vì vậy bạn có thể sử dụng thông số của đối tượng trên truy vấn $ set. Dưới đây là một ví dụ:tự cập nhật bằng cách sử dụng MongoDB

> db.labels.save({"name":"label1", "test":"hello"}) 
> db.labels.save({"name":"label2", "test":"hello"}) 
> db.labels.save({"name":"label3", "test":"hello"}) 
> db.labels.find() 
{ "_id" : ObjectId("4f1200e2f8509434f1d28496"), "name" : "label1", "test" : "hello" } 
{ "_id" : ObjectId("4f1200e6f8509434f1d28497"), "name" : "label2", "test" : "hello" } 
{ "_id" : ObjectId("4f1200eaf8509434f1d28498"), "name" : "label3", "test" : "hello" } 

tôi thấy rằng bạn có thể sử dụng cú pháp này trên $ nơi truy vấn: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-JavascriptExpressionsand%7B%7B%24where%7D%7D

> db.myCollection.find({ a : { $gt: 3 } }); 
> db.myCollection.find({ $where: "this.a > 3" }); 
> db.myCollection.find("this.a > 3"); 
> f = function() { return this.a > 3; } db.myCollection.find(f); 

Vì vậy, tôi đã cố gắng với:

db.labels.update ({"test": "hola"}, {$ set: {"test": this.name})

nhưng không hoạt động.

Kết quả dự kiến ​​là:

{ "_id" : ObjectId("4f1200e2f8509434f1d28496"), "name" : "label1", "test" : "label1" } 
{ "_id" : ObjectId("4f1200e6f8509434f1d28497"), "name" : "label2", "test" : "label2" } 
{ "_id" : ObjectId("4f1200eaf8509434f1d28498"), "name" : "label3", "test" : "label3" } 

Bất kỳ suy nghĩ? Cảm ơn trước

Trả lời

18

Hiện tại không có cách nào để thực hiện điều đó. Nhưng bạn có thể giải quyết vấn đề này bằng cách

db.labels.find({"test":"hola"}).forEach(function (doc) { 
      doc.test = doc.name; 
      db.labels.save(doc); 
    }) 
+0

Cảm ơn phản hồi RameshVel. Tôi đang sử dụng Mongoid, vì vậy tôi sẽ lặp lại kết quả và lưu nó với giá trị cũ. Tôi lo lắng về hiệu suất. Bất kỳ đề nghị? – fertapric

+0

@fertapric, xin lỗi nope: (Tôi sợ rằng đó là cách duy nhất. – RameshVel

+0

@RameshVel Điều đó vẫn đúng với phiên bản hiện tại của MongoDb? – Cartesius00

Các vấn đề liên quan