2016-06-23 4 views
1

0から多くのアイテムのコレクションから1つのアイテムをランダムに選択したい場合は、特定のフィールドを更新します。アイテムが存在しない場合は、関数を更新せずにnullを返すようにしたいと思います。ランダムに選択されたアイテムがRethinkDB内に存在する場合は更新します

私の現在のREQLコード:

r.db('test').table('test') 
.filter({ 
    something: true 
}).sample(1).nth(0).default(null).update(function(thing) { 
    return r.branch(
     thing.ne(null), 
     thing.without('reserve'), 
     null 
    ) 
}, { 
    returnChanges: true 
}); 

これは、常にエラーを返します:Expected type SELECTION but found DATUM私はREQLでこの問題に対処する方法がわからないです。

答えて

1

は、おそらくこれを書きたい:

r.db('test').table('test').filter({something: true}).sample(1).replace(function(thing) { 
    return thing.without('reserve'); 
}, {returnChanges: true}); 

これはバックあなたは、交換が実際に発生したか否かを決定するために使用することができ、書き込み要約オブジェクトをお渡しします。

+0

これはうまくいきません。クエリで返されるドキュメントがない場合、クエリは 'Index out of bounds:0'でエラーになります。 '.default(null)'を使って(私が質問したように) '予想される型SELECTIONだが見つかったDATUM'エラーを生成する。 – mark

+0

私はあなたのスニペットにはない 'nth'を書いた場合にのみ、' Index out of bounds:0'を得なければならないと思います。 ( 'update'と' replace'は 'sample'の結果をうまく処理する必要はありません) – mlucy

+0

あなたは正しいです。ありがとう!私は配列を返すことを望んでいませんでしたが、私はアプリケーションの戻り値を管理することができます。 – mark

関連する問題