我有一个芒果查询:
{
"selector": {
"age":{
"$eq": 22
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道满足此条件的文档数量。
我知道我们可以使用 map reduce 函数来实现这一点,但是有什么方法可以通过使用 mango 查询来做到这一点,例如在查询本身中使用诸如“count”之类的键,就像我们对“sort”和“fields”所做的那样。
我正在通过 rest 客户端触发 mango 查询,并且我想要文档数作为查询的响应。
我想将用户的私人信息存储在Cloudant中的CouchDB上 - 即每个用户应该只能阅读和更新他自己的文档.通常这些信息保存在_users db中,但我真的很喜欢Cloudant的API密钥,并且不想自己管理用户和密码.
我在这个wiki中找到了几个解决方案:http: //wiki.apache.org/couchdb/PerDocumentAuthorization 但它们都有局限性:
然后我想出了一个新的解决方案 - 我创建了一个数据库(称为"测试")并将所有用户配置为_writers,没有任何_readers.为了防止用户写下彼此的文档,我validate_doc_update在以下内容中设置_design/app:
function(newDoc, savedDoc, userCtx) {
if ((userCtx.roles.indexOf('_admin') < 0) && (userCtx.name != newDoc._id)) {
throw ({unauthorized: "cannot access others"});
}
}
Run Code Online (Sandbox Code Playgroud)
为了让用户阅读他们自己的文档,我编写了以下更新函数(称为"update_hack"):
function(doc, req) {
return [doc, toJSON(doc)];
}
Run Code Online (Sandbox Code Playgroud)
现在,每个用户都可以通过发送POST请求来"获取"他的文档:
http://<username>:<password>@<host>/db/_design/app/_update/update_hack/<username>
Run Code Online (Sandbox Code Playgroud)
如果用户尝试向其他用户的文档发送POST请求,请说:
http://<username>:<password>@<host>/test/_design/app/_update/update_hack/someoneelse
Run Code Online (Sandbox Code Playgroud)
那么他会得到一个{"error":"unauthorized","reason":"cannot access others"}回应,试图"更新"文件.
这种技巧效率低下,因为每次用户"获取"他的文档时,文档的修订都必须改变.还存在通过发送POST请求来实现用户名是否存在的问题(如果文档不存在,则将返回"null").
你觉得这个技巧有什么安全漏洞吗?
当用户通过API密钥生成时,是否有更好的方法来存储每个用户的私人文档?(即使有,我仍然认为我的伎俩很酷).
我们有一个使用Cloudant作为远程服务器的应用程序.尽管如此,Cloudant并不完全兼容TouchDB以往经验的持续复制.因此,我们现在的替代方案是以固定频率手动触发一次性复制.尽管如此,我们想知道这种方法是否会比连续复制花费更多的钱,因为连续复制使用longpoll并且不需要经常查询服务器.换句话说,使用Cloudant作为目标的一次性拉动复制是否需要我们GET请求?
谢谢你,保罗
对于CouchDB,我是新手.我来自.NET SQL Server世界.
在通过CouchDB浏览权威指南时,我觉得"这太棒了".现在我正在测试我学到的一些东西,希望在现实世界中实现它.
几周前我刚刚注册了Cloudant帐户,并开始使用它进行一些测试/学习.
在弄乱链接文档时,背后的整个理论看起来很简单,也是互联网上的海峡前沿例子.我想从具有不同链接文档数组的文档中检索某些信息,这些文档本身具有链接文档数组.就像连接到多对多关系表的多SQL Server一样.你会看到下面的代码.希望这是有道理的.
以此SQL查询为例.假设每个表中只有一个条目,我们应该返回一条记录,其中包含具有给定sku的鞋子的所有细节.但如果我们有多种鞋码,我们就不得不再写一些代码了.
select ci.sku
,sc.color
,ss.size
,si.url
from CatalogItem ci
join ShoeImages si
on ci.sku = si.sku
and ci.sku = '656F-PINSEC12'
join ShoeSizes ss
on ci.sku = ss.sku
join ShoeColors sc
on ci.sku = sc.sku
Run Code Online (Sandbox Code Playgroud)
我希望CouchDB通过SKU返回以下JSON,网址为https://username.cloudant.com/test/_design/catalogue/_view/item-details?include_docs=true&key=%22656F-PINSEC12%22
{
"_id": "689fe6982f4d604541db67ee4050a535",
"_rev": "5-64b5ddd751c51aadfcef1962c2c99c16",
"type": "catalogue-item",
"sku": "656F-PINSEC12",
"upc": "8549875231",
"shoe-colors":
[
{
"color": "black/houndstooth"
"shoe-sizes":
[
{
"size": 5,
"IsSizeAvailable": true
},
{
"size": 6,
"IsSizeAvailable": true
},
{
"size": 7,
"IsSizeAvailable": true …Run Code Online (Sandbox Code Playgroud) 我正计划将我的数据库存储在Cloudant中.
在我们的应用程序的开发,测试和暂存期间使用本地CouchDB是否安全,并知道本地的所有工作都适用于Cloudant?
假设我有这三个文件:
{ "_id": "11111", "type": "template", "name": "person" }
{ "_id": "22222", "type": "template", "name": "place" }
{ "_id": "33333", "type": "template", "name": "thing" }
Run Code Online (Sandbox Code Playgroud)
我有一个云数据库,然后我有一个设备与该数据库的pouchDB同步.
这些是我做的步骤:
码
var template_obj = {};
return device_db.query('filters/templates')
.then((templates) => {
for (let t of templates.rows) templates_obj[t.id] = true;
return templates_obj;
});
Run Code Online (Sandbox Code Playgroud)
过滤器/模板
function (doc) {
if(doc.type == "template")
emit(doc._id);
}
Run Code Online (Sandbox Code Playgroud)
返回
{ "11111": true, "22222": true, "33333": true }
Run Code Online (Sandbox Code Playgroud)
我更新模板:云上的人.然后我再次更新它.因此,在没有同步到我的设备的情况下进行了2次修订.
我与我的设备同步.
返回
{"11111": true}
Run Code Online (Sandbox Code Playgroud)
_rev云中的相同模板将显示在设备上.意味着同步成功并且视图变得混乱.新代码
return device_db.allDocs({conflicts: …Run Code Online (Sandbox Code Playgroud) 文档到期字段是使用日期时间还是秒或毫秒设置的?据我所知,这是秒:
"expiration": 1543086426,
Run Code Online (Sandbox Code Playgroud)
所以 1543086426 = Saturday, November 24, 2018 7:07:06 PM
那么为什么Cloudant会删除该文档?如果是毫秒,那么:
1543086426 = Sunday 18 January 1970 12:38:06
Run Code Online (Sandbox Code Playgroud)
这解释了.那么如何为cloudant文档设置合适的到期值,例如在1个月后呢?
此外,哪个Cloudant任务负责删除文档?它开始的频率是多少?
我正在尝试在本地CouchDB安装(Mac上为v 1.3.1)和Cloudant上的数据库中同步主 - 主复制.
在我的本地Futon中,http://localhost:5984/_utils我已将Replicator配置为将本地数据库复制到Cloudant.一切都可以很好地从本地数据库复制到Cloudant,但不能倒退.如果Cloudant数据库中的数据发生更改,则这些更改不会复制到我的本地数据库.
Local - > Cloudant =有效
Cloudant - > Local =不起作用
这有可能吗?有人可以帮忙吗?
谢谢!
使用/_changes?filter=_design我可以获得设计文档的所有更改.
如何仅获取文档的所有更改?
有这样的事情吗/_changes?filter=_docs_only???
cloudant ×10
couchdb ×8
couchdb-2.0 ×1
ibm-cloud ×1
ios ×1
javascript ×1
nosql ×1
pouchdb ×1
react-native ×1
security ×1
touchdb ×1