我有一个芒果查询:
{
"selector": {
"age":{
"$eq": 22
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道满足此条件的文档数量。
我知道我们可以使用 map reduce 函数来实现这一点,但是有什么方法可以通过使用 mango 查询来做到这一点,例如在查询本身中使用诸如“count”之类的键,就像我们对“sort”和“fields”所做的那样。
我正在通过 rest 客户端触发 mango 查询,并且我想要文档数作为查询的响应。
我将在CouchDB 2.1_id
中实现我自己独特的字段生成算法,我想弄清楚我的限制有多大。我发现的唯一参考资料是:_id
\n\n\n_id(字符串)\xe2\x80\x93 文档 ID
\n
我可以使用任意长的 ASCII 符号文本作为 吗_id
?允许使用哪些字符?
我有以下文件:
{ _id: "123", type: "project", worksite_id: "worksite_1" }
{ _id: "456", type: "document", project_id: "123" }
{ _id: "789", type: "signature", document_id: "456" }
Run Code Online (Sandbox Code Playgroud)
我的目标是运行查询,并且不可避免地对所有与之连接的文档进行过滤复制worksite_id: worksite_1
.
例:
如果我想要来自该工地的所有内容,我应该能够检索所有这些文档.
通常我会添加一个worksite_id
给我type:document
和type:signature
.但是,由于各种原因,工地可能会在项目中发生变化.
我想知道是否有办法创建索引或做一些我不想要显示这些相似之处的东西.
这感觉就像它在正确的道路上,但解释将文档放在其他文档中,我只是想让它们分开.
任何帮助,将不胜感激.
我创建了一个默认的GWT项目,尝试使用CouchDB作为我的数据库,使用简单的条目在数据库中创建文档.以前我们使用CouchDB 1.6即蒲团作为UI.现在,最近尝试使用CouchDB 2.0即Fauxton作为UI.
问题:-
无法在CouchDB 2.0中创建文档.
服务器端代码: -
public String greetServer(String input) throws IllegalArgumentException {
// Verify that the input is valid.
System.out.println(input);
Session session=new Session("192.168.1.48",5984);
Database db=session.getDatabase("testing");
Document doc=new Document();
doc.put("name", input);
db.saveDocument(doc);
return "Hello, " + input;
}
Run Code Online (Sandbox Code Playgroud)
例外:-
2017-02-22 17:23:41.147:WARN:/:qtp10750155-45: Exception while dispatching incoming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.lang.String com.dbconnect.client.GreetingService.greetServer(java.lang.String) throws java.lang.IllegalArgumentException' threw an unexpected exception: net.sf.json.JSONException: JSONObject["update_seq"] is not a number.
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:416)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:605)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:333)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:303)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:373)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) …
Run Code Online (Sandbox Code Playgroud) 我正在阅读本文https://cloudant.com/blog/mango-json-vs-text-indexes,我想在我的CouchDB中创建TEXT索引
在Fauxton-> Mango Indexes页面中,我发布了
{
"index": {
"fields": [
{
"name": "id_str",
"type": "number"
}
]
},
"name": "doc_id",
"type": "text"
}
Run Code Online (Sandbox Code Playgroud)
...但是出现503错误,并显示以下消息:
{"error":"required index service unavailable","reason":"text"}
Run Code Online (Sandbox Code Playgroud)
我什至无法在他们的文档中找到任何相关信息,我现在真的很迷失。
所以:
请帮忙,谢谢。
我试图重新访问存储在 CouchDB 中的数据库,但This database failed to load.
显示的是错误而不是数据库(请参阅附件)。
This database failed to load.
的操作丢失)。但是,我以管理员身份登录。delete
replicate
你能帮我找到错误的根本原因吗?
简单的 PUT 和 DELETE 请求curl -X PUT http://admin:somepassword@127.0.0.1:5984/testdb
:
[error] 2018-02-09T15:06:05.221393Z couchdb@127.0.0.1 <0.1112.0> e84f27d276 Request to create N=3 DB but only 2 node(s)
[error] 2018-02-09T15:06:05.237308Z couchdb@127.0.0.1 <0.1173.0> -------- ** System running to use fully qualified hostnames **
** Hostname localhost is illegal **
[notice] 2018-02-09T15:06:05.252506Z couchdb@127.0.0.1 <0.1112.0> e84f27d276 www.example.com:5984 130.211.68.93 undefined PUT /testdb 500 ok 47
[notice] 2018-02-09T15:06:16.286511Z couchdb@127.0.0.1 …
Run Code Online (Sandbox Code Playgroud) 我已经阅读了有关可以在CouchDB上创建的验证(validate_doc_update)的信息,但是我没有弄清楚如何创建它们。我可以通过Fauxton吗?
Databases -> "mydb" -> Design Documents -> New Doc
Run Code Online (Sandbox Code Playgroud)
是这样吗 我必须将函数声明为字符串吗?我需要一个示例(文档中有任何分步说明)。
谢谢。
我目前正在开发一个docker-compose设置,可用于部署CouchDB 2节点集群.我终于让节点工作并且数据在节点间同步,但除非我弄错了,否则看起来CouchDB不会同步用户会话.
我的设置有3个节点,并使用几乎与haproxy.cfg相同的haproxy设置.根据我的配置,haproxy将端口5984上的传入流量路由到所有3个节点上的端口5984.
假设管理员用户名root
和密码为password
.
我首先登录:
curl -vX POST http://localhost:5984/_session -H 'Content-Type: application/x-www-form-urlencoded' -d 'name=root&password=password'
Run Code Online (Sandbox Code Playgroud)
请注意,返回的AuthSession在下面用作AUTHSESSION.
然后,我发出以下内容:
curl -X PUT http://localhost:5984/mydb --cookie AuthSession=AUTHSESSION -H "X-CouchDB-WWW-Authenticate: Cookie" -H "Content-Type: application/x-www-form-urlencoded"
Run Code Online (Sandbox Code Playgroud)
这通常会失败,"你不是服务器管理员."我可以继续发出相同的PUT,它最终会成功,因为我认为haproxy最终将请求路由到我通过身份验证的单个节点.由于haproxy使用循环法,我将有三分之一的机会击中目标节点.
我认为CouchDB 2可以处理跨节点同步用户会话.我在这做一个愚蠢的假设吗?
(请通过docker-compose查看运行集群以复制我的设置)
使用docker-compose设置的特定解决方案进行更新
根据@lossleader,您需要在[couch_httpd_auth]部分中设置秘密,以使其在节点之间相同.此外,您需要在[admins]部分中设置相同的管理员用户名和密码.我在这里错过的细节是所有节点必须在.ini文件中具有完全相同的密码哈希.拥有相同的明文密码是不够的,否则,每个节点将生成自己的salt并生成不同的哈希.
有关我的完整设置,请参阅通过docker-compose运行集群.
当用户想要搜索数据库时,我使用Couchdb进行Mango查询.他们可以搜索文档中的多个字段.
为了简化,我有一个包含三个字段的文档,所有这些字段都可以搜索以查找文档.
FieldOne: cow
FieldTwo: pig
FieldThree: dog
Run Code Online (Sandbox Code Playgroud)
为查询创建芒果索引时,我应该使用哪些字段?我应该用多个字段创建和索引吗?订单重要吗?
在字段中还定义了三种不同的文档类型(A,BC).我只需要搜索一个,是否可以从索引中排除其他类型以使其更快?
Field_Type: A
Run Code Online (Sandbox Code Playgroud)
能够针对视图运行索引以仅搜索我感兴趣的文档是有意义的.这可能吗?
示例索引
已知出现在查询中的字段上的一个索引
{
"index": {
"fields": [
"FieldOne"
]
},
"name": "foo-json-index",
"type": "json"
}
Run Code Online (Sandbox Code Playgroud)
多个索引,不确定是否使用?
{
"index": {
"fields": [
"FieldOne",
"FieldTwo",
"FieldThree"
]
},
"name": "foo-json-index",
"type": "json"
}
Run Code Online (Sandbox Code Playgroud)
或者多个索引在构建查询时选择正确的索引?
获得最快搜索结果的正确方法是什么?
由于我的服务器上运行着多个 couchjs 进程,我正在尝试将 couchdb 视图转换为 Erlang。
我浏览了一些教程和一些 stackoverflow 问题,但没有看到任何人谈论我应该在哪里输入代码并按保存按钮(或 http api)。旧文档谈到了临时视图,但似乎这个功能在 couchdb 2.1 中不存在。
我已经启用了native-erlang-query-server
编辑:我尝试更改语言,但收到此错误。仅将内容类型更改为multipart/form-data
也不起作用
EDIT2:正如胡安霍·罗德里格斯所说,与 PUT 合作
I\xe2\x80\x99m 深入研究 CouchDB 2,并且 I\xe2\x80\x99m 发现一些意外的序列号排序。在一种情况下,我发现 _changes feed 中的早期更改具有序列号
\n\n99-g1AAAAI-eJyd0EsOgjAQBuAGiI-dN9C9LmrBwqzkJtrSNkgQV6z1JnoTvYneBEvbhA0aMU1mkj6-_NMSITTJfYFm2anOcsFT10mpTzyG-LxpmiL32eqoN8aEAcWE9dz_jPCFrnzrHGQchiFM4kSgaV0JqQ6VFF-AtAV2DggMgCEGxrNhQfatc3bOyDiKUalg2EBVoCu66KapazcUh41e69-GssjNIvcWWRokk2oNofwj0MNazy4QFURhGQ0J9LKI-SHPIBHEgiak51nxBhxnrRk\n
Run Code Online (Sandbox Code Playgroud)\n\n对于同一数据库,我的 _changes feed 中的最后一个序列号是
\n\n228-g1AAAAJFeJyd0EkOgjAUBuAGTJCdN9AjlIKFruQm2jFAEFes9SZ6E72J3gQ7JW7QCGnyXtLhy-vfAgCWVSjAip96XglW-o5afRJQwNbDMDRVSOuj3ogQJRgiOnL_O8I2urKdd4B1KCRpkRcCxH0npKo7KX4ApQH2HogsAElOKOPTBjkY5-yd2DqKYqnItA91C13BRTdNXY0VWouRrV7JDOvmrLuxlLW4VAlJ5Qzr4aznJ2wskIIy-y9sh7wcYoMKLJKRXOACjTxr3uHcsBE\n
Run Code Online (Sandbox Code Playgroud)\n\n在浏览器控制台中,以下内容是错误的
\n\n'228-g1AAAAJFeJyd0EkOgjAUBuAGTJCdN9AjlIKFruQm2jFAEFes9SZ6E72J3gQ7JW7QCGnyXtLhy-vfAgCWVSjAip96XglW-o5afRJQwNbDMDRVSOuj3ogQJRgiOnL_O8I2urKdd4B1KCRpkRcCxH0npKo7KX4ApQH2HogsAElOKOPTBjkY5-yd2DqKYqnItA91C13BRTdNXY0VWouRrV7JDOvmrLuxlLW4VAlJ5Qzr4aznJ2wskIIy-y9sh7wcYoMKLJKRXOACjTxr3uHcsBE' > '99-g1AAAAI-eJyd0EsOgjAQBuAGiI-dN9C9LmrBwqzkJtrSNkgQV6z1JnoTvYneBEvbhA0aMU1mkj6-_NMSITTJfYFm2anOcsFT10mpTzyG-LxpmiL32eqoN8aEAcWE9dz_jPCFrnzrHGQchiFM4kSgaV0JqQ6VFF-AtAV2DggMgCEGxrNhQfatc3bOyDiKUalg2EBVoCu66KapazcUh41e69-GssjNIvcWWRokk2oNofwj0MNazy4QFURhGQ0J9LKI-SHPIBHEgiak51nxBhxnrRk'\n
Run Code Online (Sandbox Code Playgroud)\n\n这是一个错误还是我需要使用其他方法来比较序列号?
\n\n在查看我的 _changes feed 中的其他序列号时,看起来它们通常按照我的预期进行排序,但在这种情况下,当第一个数字(例如 99)从 2 位数字跳到 3 位数字时,排序会中断。如果将其归结为一个简单的字符串比较示例,您可以看到 '228' > '99' => false
\n假设我的一些文档具有以下结构:
{
"something":{
"a":"b"
},
"some_other_thing":{
"c":"d"
},
"what_i_want":{
"is_down_here":[
{
"some":{
"not_needed":"object"
},
"another":{
"also_not_needed":"object"
},
"i_look_for":"this_tag",
"tag_properties":{
"this":"that"
}
},
{
"but_not":{
"down":"here"
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
是否有可以成功选择"i_look_for"
具有该值的Mango JSON选择器"this_tag"
?它在一个数组内(我知道它在数组中的位置).我也有兴趣过滤结果,所以我只得到 "tag_properties"
结果.
我尝试了很多东西,包括$ elemMatch,但一切都回归"无效的json".
这甚至是芒果的用例还是应该坚持观点?