标签: couchbase-view

如何从Couchbase Java SDK 2.1创建视图

我需要使用map函数ex创建一个视图:

function(doc, meta) {
  if(doc.docType == "testDoc")
    emit(meta.id, doc)
}
Run Code Online (Sandbox Code Playgroud)

我必须使用沙发床Java客户端2.1创建此视图。文档中找不到任何东西,谢谢

couchbase couchbase-view couchbase-java-api

3
推荐指数
1
解决办法
131
查看次数

Couchbase:读取桶中的所有文档

有没有办法从桶中读取所有文件?它是一个活跃的存储桶,我也想访问新创建的文档.
很少有人建议使用查看来查询存储桶.
如何创建将使用新文档或更新文档更新的视图?
新创建的视图的地图功能:

function (doc, meta) {
  emit(doc);
}
Run Code Online (Sandbox Code Playgroud)

减少功能是空的.当我查询这样的视图时,bucket.query(ViewQuery.from("test1", "all")).totalRows()它返回0结果.

java couchbase couchbase-view

3
推荐指数
1
解决办法
1465
查看次数

克服Couchbase中的查询限制

我们最近从关系(MySQL)转向NoSQL(couchbase).基本上它是社交手机游戏的后端.我们在扩展后端以处理越来越多的用户时遇到了很多问题.当使用MySQL加载时,由于多个表之间存在大量连接,因此用户花费了大量时间.在加载数据后,我们看到了一个巨大的改进,特别是在加载数据时,因为大多数数据保存在单个文档中.

在缺点方面,就查询而言,couchbase似乎也有很多限制.Couchbase替代SQL查询是视图.虽然我们设法使用map-reduce处理大多数查询,但我们真的很难弄清楚如何处理基于时间的查询.例如,我们需要根据timestamp属性过滤用户.如果时间少于当前时间,我们只需要一个用户:

if(user.time < new Date().getTime() / 1000)
Run Code Online (Sandbox Code Playgroud)

会发生的情况是,一旦将用户的时间设置为某个未来的时间,它就会被豁免于此视图,这是期望的行为,但除非我们更新它,否则它永远不会被添加回视图 - 文档仅在其视图中被重新编入索引时更新.

我们现在的解决方案是加载前x个用户文档,然后在我们的应用程序中检查时间.对user.time属性进行排序,以便我们获得那些时间小于或接近当前时间的用户.但我不确定这是否真的会在实时环境中起作用.理想情况下,我们希望在应用程序级别避免这些类型的检查.

当我们需要检查多个基于时间的属性时,也有时候例如匹配.我们当前的策略在这种情况下不起作用,并且我们经常从视图中获取在应用程序中完成时未通过这些检查的文档.如果已经解决类​​似问题的人可以分享他们的经验,我将非常感激.提前致谢.

更新:

我们尝试使用仅适用于一个密钥的范围查询.就像我在大多数情况下所说的那样,我们有多个基于时间的键意味着多个范围不起作用.

mapreduce nosql couchbase couchbase-view

2
推荐指数
1
解决办法
2831
查看次数

将N1QL与文档密钥一起使用

我是相当新的couchbase,并试图找到我正在尝试创建的特定查询的答案到目前为止没有太大的成功.

我已经在使用视图或N1QL来讨论这个特殊情况并且使用N1QL解决了但是没有设法使它工作,所以也许一个视图更好.

基本上我有以下文档的文档密钥(Group_1):

Group_1
{
  "cbType": "group",
  "ID": 1,
  "Name": "Group Atlas 3",
  "StoreList": [
    2,
    4,
    6
  ]
}
Run Code Online (Sandbox Code Playgroud)

我还有"存储"文档,它们的密钥列在本文档的商店列表中.(Store_2,Store_4,Store_6并且它们的storeID值为2,4和6)我基本上想要获得列出的所有3个文档.

我所做的工作是通过以下方式获取此文档的ID:

var result = CouchbaseManager.Bucket.Get<dynamic>(couchbaseKey);
mygroup = JsonConvert.DeserializeObject<Group> (result.ToString());
Run Code Online (Sandbox Code Playgroud)

然后我可以循环遍历它的商店列表并以相同的方式获取它的所有商店,但我不需要该组中的任何其他内容,我想要的只是商店,并且希望在单个操作中执行此操作.

有谁知道如何直接对指定的文档值执行N1QL?类似的东西(这是完全虚构的非工作代码,我只是想清楚地说明我想要的东西):

SELECT*FROM mycouchbase WHERE documentkey IN Group_1.StoreList

谢谢

更新: 所以Nic的解决方案不起作用;

这是我最接近我需要的东西:

SELECT b from DataBoard c USE KEYS ["Group_X"] UNNEST c.StoreList b;

"results":[{"b":2},{"b":4},{"b":6}]
Run Code Online (Sandbox Code Playgroud)

这将返回我想要的任何给定组(Group_X)的商店的ID列表 - 我还没有找到一种方法来获取完整的商店而不仅仅是同一语句中的ID.

一旦我有了,我将发布完整的解决方案以及我在此过程中遇到的所有减速带.

couchbase couchbase-view sql++

1
推荐指数
1
解决办法
5473
查看次数