Couchbase 视图不更新以添加以前被忽略的对象
将文档插入存储桶后,视图中没有文档 我的文件:Couchbase 视图不更新以添加以前被忽略的对象,couchbase,couchbase-view,couchbase-java-api,Couchbase,Couchbase View,Couchbase Java Api,将文档插入存储桶后,视图中没有文档 我的文件: { "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
{
"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的文档时,视图将更新
curl -H "Content-Type: application/json" -X POST -v -d 'Jsondocument' 'http://Administrator:pass@localhost: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);
}
}
}
}
}
}
我的电脑时间戳是1512054982454。
Couchbase服务器的时间戳是1512054876554。
功能(文档、元){
如果(meta.type==“json”){
如果(doc.type&&doc.type==“kv”){
---->如果(doc.startDate&&doc.startDate=Date.now()| | doc.endDate==1)){
if(doc.state&&doc.state==1){
emit([doc.userid,doc.source\u id],null);
}
}
}
}
}
}
背景
让我们从一个高层次来分析这里发生的事情:
if(doc.startDate&&doc.startDate它从来没有出现过吗?或者只是没有立即出现?Couchbase视图通常由于重新索引它们所需的时间而大大落后于主数据存储。虽然我等待了很长时间,但它从未出现。重新索引只能通过删除和重新创建视图来完成。啊,我想我明白你的意思了。您希望视图动态更新自身。如果不对对象本身进行相应更新,则不可能实现此操作。
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);
}
}
}
}
}
}