使用MongoDB自引用更新

fer*_*ric 7 self mongodb mongoid

我想知道是否有办法在MongoDB中进行自引用更新,因此您可以在$ set查询中使用对象的参数.这是一个例子:

> 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" }
Run Code Online (Sandbox Code Playgroud)

我看到,您可以使用$该语法,其中查询: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);
Run Code Online (Sandbox Code Playgroud)

所以,我试过:

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

但它不起作用.

预期的结果是:

{ "_id" : ObjectId("4f1200e2f8509434f1d28496"), "name" : "label1", "test" : "label1" }
{ "_id" : ObjectId("4f1200e6f8509434f1d28497"), "name" : "label2", "test" : "label2" }
{ "_id" : ObjectId("4f1200eaf8509434f1d28498"), "name" : "label3", "test" : "label3" }
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?提前致谢

Ram*_*Vel 20

目前没有直接的方法可以做到这一点.但你可以解决这个问题

    db.labels.find({"test":"hola"}).forEach(function (doc) {
           doc.test = doc.name;
           db.labels.save(doc); 
    })
Run Code Online (Sandbox Code Playgroud)

  • @ Cartesius00,似乎它仍然是一个开放的请求每https://jira.mongodb.org/browse/SERVER-1765?page=com.atlassian.jira.plugin.system.issuetabpanels:changehistory-tabpanel (2认同)