2016-06-24 8 views
0

私はrethinkdbで新しく、存在しないか、値が新しい値よりも小さい場合、いくつかのフィールドに値を設定する、設定する。以下は、私はこのコードは、彼らがnullの場合にのみtenantIdとtimeLayerを設定し、他のフィールドのために、彼らがnullであるか、値Iがに設定された値未満である場合にのみ、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)) 

でそれをやった方法ですクエリ。 rethinkdbで同じことをする方法はありますか?そしてどうやって?

おかげで、 ダニエラ

+0

は、私は次のクエリは、私はMongoの中でやったことと等価であると思いますが、それは失敗します。 – Daniela

答えて

0

は、私は次のクエリは、私はMongoの中でやったことと等価であると思いますが、それは失敗します。

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

戻りr.branch( matches.isEmpty()、 r.table( 'book_keeper')(INSERT。{tenantId: '123'、timeLayer:4、latestRawData:100、ID:4} (doc.hasFields( 'firstFullData'))。または(doc( 'book_keeper'))。doc.not(doc.hasFields( 'firstFullData'))。 r.table( 'book_keeper')。get(4).update(function(doc){ return r.branch 。firstFullData ')LT(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); })); }) 

どうすれば修正できますか?

おかげで、

ダニエラ

関連する問題