2016-06-24 7 views
0

Я новичок в rethinkdb, я пытаюсь написать запрос на обновление предпочтительного upsert, который установит значения для нескольких полей, если они не существуют или их значения меньше, чем новое значение, которое я хочу устанавливать. Ниже, как я сделал это с MongoDBОкончательное обновление нескольких полей

collection.updateOne(new BasicDBObject(BookKeeperEvent.tenantPropertyName, bookKeeper.getTenantId()).append(BookKeeperEvent.timeLayerPropertyName, bookKeeper.getTimeLayer()), 
      new BasicDBObject("$max", new BasicDBObject(BookKeeperEvent.latestFullDataPropertyName, bookKeeper.getLatestFullData()) 
        .append(BookKeeperEvent.latestRawDataPropertyName, bookKeeper.getLatestRawData()) 
        .append(BookKeeperEvent.latestHealthPropertyName, bookKeeper.getLatestHealth()) 
        .append(BookKeeperEvent.lastUpdatePropertyName, bookKeeper.getLastUpdate()) 
        .append(BookKeeperEvent.firstFullDataPropertyName, bookKeeper.getFirstFullData())) 
        .append("$setOnInsert", new BasicDBObject(BookKeeperEvent.tenantPropertyName, bookKeeper.getTenantId()).append(BookKeeperEvent.timeLayerPropertyName, bookKeeper.getTimeLayer())), 
      new UpdateOptions().upsert(true)) 

Этот код устанавливается tenantId и timeLayer только если они равны нулю, и для других полей, только если они равны нулю или значение меньше, чем значение, я поставил в запрос. Есть ли способ сделать то же самое в rethinkdb? и как?

Спасибо, Daniela

+0

Я думаю, что следующий запрос эквивалентен тому, что я сделал в Монго, но терпит неудачу. – Daniela

ответ

0

Я думаю, что следующий запрос эквивалентен тому, что я сделал в Монго, но терпит неудачу. .

r.table('book_keeper').filter({tenantId: '123', timeLayer: 4}).coerceTo('array').do(function (matches) { 

возврата r.branch ( matches.isEmpty(), r.table ('book_keeper') вставки ({tenantId: '123', timeLayer: 4, latestRawData: 100, ID: 4}), r.table ('book_keeper'). Get (4) .update (function (doc) { return r.branch ( doc.not (doc.hasFields ('firstFullData')). Или (doc (' . firstFullData ') л (100)), {firstFullData: 100}, нуль) } )) })

excption является:

e: Expected 1 argument but found 2 in: 
r.table("book_keeper").filter({"tenantId": "123", "timeLayer": 4}).coerceTo("array").do(function(var_193) { return r.branch(var_193.isEmpty(), r.table("book_keeper").insert({"tenantId": "123", "timeLayer": 4, "latestRawData": 100, "id": 4}), r.table("book_keeper").get(4).update(function(var_194) { return r.branch(var_194.not(var_194.hasFields("firstFullData")).or(var_194("firstFullData").lt(100)), {"firstFullData": 100}, null); })); }) 

Как это исправить?

Спасибо,

Daniela

Смежные вопросы