ドキュメントがバケットに挿入された後、表示されるドキュメントはありません。ビューは、以前に無視されたオブジェクトを追加するために更新されません。
マイドキュメント:
{
"state": 1,
"rdbms_id": 0,
"startDate": 1511882685998,
"endDate": -1,
"type": "kv",
"userid": 1222,
"uuid": "84fd36ad-b8bd-4abb-90ac-eae407f9364a",
"amount": 1234,
"source_id": 12
}
ビューインデックスコード:
function (doc, meta) {
if(meta.type=="json"){
if(doc.type && doc.type === "kv"){
if(doc.startDate && doc.startDate<=Date.now()){
if(doc.endDate && (doc.endDate>=Date.now() || doc.endDate==-1)){
if(doc.state && doc.state==1){
emit([doc.userid,doc.source_id], null);
}
}
}
}
}
}
マイビューのクエリ:カールとの文書を追加するとき
curl http://Administrator:[email protected]:8092/bss_write/_design/fihrist/_view/forUcrKVIds?limit=6&stale=false&connection_timeout=60000&inclusive_end=true&skip=0
ビューが更新されます。
curl -H "Content-Type: application/json" -X POST -v -d 'Jsondocument' 'http://Administrator:[email protected]:8091/pools/default/buckets/bss_write/docs/kv-84fd36ad-b8bd-4abb-90ac-eae407f9364a'
ただし、プログラムで追加するとビューが更新されません。
Cluster cluster = CouchbaseCluster.create("localhost");
cluster.authenticate("username", "");
Bucket bucket = cluster.openBucket("bss_write");
JsonObject doc = JsonObject.fromJson(Jsondocument);
bucket.upsert(JsonDocument.create(type+"-"+uuid, doc));
プログラムでビューを更新する手順を実行する必要がありますか?
アップデート2:
問題は、時間差です。ドキュメントが追加されると、日付条件が一致しないためビューが更新されません。
ただし、ドキュメントの追加後にビュー条件が満たされてもビューは更新されません。例えば
:
My computer timestamp is 1512054982454.
Couchbase server timestamp is 1512054876554.
function (doc, meta) {
if(meta.type=="json"){
if(doc.type && doc.type === "kv"){
---->if(doc.startDate && doc.startDate<=Date.now()){ //This returns false.
if(doc.endDate && (doc.endDate>=Date.now() || doc.endDate==-1)){
if(doc.state && doc.state==1){
emit([doc.userid,doc.source_id], null);
}
}
}
}
}
}
*これまでに*表示されませんか?それともすぐにはないのですか?カーカスベースのビューは、インデックスを再インデックスするために必要な時間のために、主データストアよりもかなり遅れていることがよくあります。 – theMayer
私は長い間待っていますが、決して現れません。再索引付けは、ビューを削除して再作成することによってのみ実行されます。 – onder
ああ、あなたが言っていることを理解していると思います。ビューを動的に更新したいと思っています。そのようなことは、オブジェクト自体に対応する更新なしには不可能です。 – theMayer