我正在尝试使用Node.js连接到Cloudant上的CouchDB数据库.
这适用于shell:
curl https://weng:password@weng.cloudant.com/my_app/_all_docs
Run Code Online (Sandbox Code Playgroud)
但是这个node.js代码不起作用:
var couchdb = http.createClient(443, 'weng:password@weng.cloudant.com', true);
var request = couchdb.request('GET', '/my_app/_all_docs', {
'Host': 'weng.cloudant.com'
});
request.end();
request.on('response', function (response) {
response.on('data', function (data) {
util.print(data);
});
});
Run Code Online (Sandbox Code Playgroud)
它给了我这些数据:
{"error":"unauthorized","reason":"_reader access is required for this request"}
Run Code Online (Sandbox Code Playgroud)
如何使用Node.js列出我的所有数据库?
我正在使用Cloudant上的CouchDB进行设置,我很困惑,因为Cloudant似乎与普通的CouchDB不同.具体而言,Cloudant似乎缺少_users数据库.
我在这里阅读了Cloudant auth FAQ ,它提供了以下说明:
我可以在Cloudant上使用CouchDB安全功能(_users数据库,安全对象,验证功能)吗?
是的你可以.如果要使用_users数据库,则必须首先关闭要通过_users管理的角色的Cloudant自身安全性.为此,您需要将如下所示的JSON文档输入到数据库的_security端点(例如 https://USERNAME.cloudant.com/DATABASE/_security):
{"cloudant":{"nobody":["_reader","_ writeer","_ admin"]},"读者":{"名称":["演示"],"角色":[]}}
这些说明工作正常,并允许我更新数据库的_security对象.
不清楚的是如何设置_users数据库.它不是自动存在的,所以我尝试使用常规创建它:
curl -X PUT $COUCH/_users
这工作正常,但当我尝试将新用户添加到_users时,如下所示:
curl -HContent-Type:application/json \
-vXPUT $COUCH/_users/org.couchdb.user:me \
--data-binary '{"_id": "org.couchdb.user:me","name": "me","roles": [],"type": "user","password": "pwd"}'
Run Code Online (Sandbox Code Playgroud)
它似乎正确创建文档:
{"ok":true,"id":"org.couchdb.user:me","rev":"3-86c3801fdb8c32331f5f2580e861a765"}
但是Cloudant上的_users中的新用户缺少哈希密码:
{
"_id": "org.couchdb.user:me",
"_rev": "3-86c3801fdb8c32331f5f2580e861a765",
"name": "me",
"roles": [
],
"type": "user",
"password": "pwd"
}
Run Code Online (Sandbox Code Playgroud)
因此,当我尝试对此用户进行身份验证时,出现以下错误:
{"error":"bad_request","reason":"missing password_sha property in user doc"}
在我的本地CouchDB安装中,在_users中创建新用户会自动创建哈希密码:
{
"_id": "org.couchdb.user:test",
"_rev": "1-9c1c4360eba168468a37d7f623782d23",
"password_scheme": "pbkdf2",
"iterations": 10,
"name": "test",
"roles": [
],
"type": "user",
"derived_key": "4a122a20c1a8fdddb5307c29078e2c4269abffa5", …Run Code Online (Sandbox Code Playgroud) 当用户访问我的Python Web服务时,我正在收集许多非常有趣的数据点.例如,我有他们当前的城市,州,国家,用户代理等.我希望能够做的是通过某种类型的机器学习系统/算法(可能是贝叶斯分类器?)来运行它们,最终目标是在出现异常情况时(异常检测)获取电子邮件通知.例如,Jane Doe只在Chrome上从美国登录.因此,如果她突然在Firefox上从乌克兰登录我的网络服务,我希望看到这是一个非常"不寻常"的事件并触发通知.
我已经在使用CouchDB(特别是Cloudant),我看到人们经常在网上说,Cloudant/CouchDB非常适合这种事情(大数据分析).但是我完全不知道从哪里开始.我没有找到关于相对简单地跟踪Web服务的外围事件的文档,更不用说使用CouchDB存储以前"学习"的数据了.我看到了几种用于进行此类数据处理的专用系统(需要想到的是PredictionIO),但考虑到CouchDB的本质,我不禁觉得它们有点过分.
任何见解都会非常感激.谢谢!
一些对查询SQL数据库有很好了解的开发人员很难在Cloudant/CouchDB中实现等效的查询模式.
这些开发人员如何将他们的SQL知识转换为Cloudant/CouchDB?
这很奇怪.它也有点长,所以提前道歉. 更新 - 它最终成为2个问题,请参阅下面的答案.
这是我的错误: EXCEPTION: this.svg.selectAll(...).data(...).enter is not a function
我有一个angular-cli客户端和一个节点api服务器.我可以使用observable从服务中检索states.json文件(下面的代码).d3喜欢该文件并显示预期的美国地图.
当我将api服务器中的服务目标从文件更改为bluemix-cloudant服务器时,我在客户端收到上述错误.
当我使用ngOnInit在一个变体中使用console.log输出时,最初mapData打印为一个空数组,并抛出错误.这是错误的明显来源,因为没有数据,但Chrome调试器显示待处理的请求.请求完成后,数据将按预期在控制台中打印.
map.component.ts:
import { Component, ElementRef, Input } from '@angular/core';
import * as D3 from 'd3';
import '../rxjs-operators';
import { MapService } from '../map.service';
@Component({
selector: 'map-component',
templateUrl: './map.component.html',
styleUrls: ['./map.component.css']
})
export class MapComponent {
errorMessage: string;
height;
host;
htmlElement: HTMLElement;
mapData;
margin;
projection;
path;
svg;
width;
constructor (private _element: ElementRef, private _mapService: MapService) {
this.host = D3.select(this._element.nativeElement); …Run Code Online (Sandbox Code Playgroud) 我试图在CouchDB中建立一个相当简单的关系,我无法确定实现这一目标的最佳方法.我希望用户能够创建视频游戏对象列表.我已经将数据库中存储的视频游戏文档包含在内"type":"game".我希望能够查询列表对象的ID(通过视图)并获取列表的元数据(标题,创建日期等)和游戏文档的部分(例如标题和发布日期).此外,我希望能够在列表中添加/删除游戏,而无需下载整个列表文档并将其发回(因此这意味着我不能简单地将游戏信息存储在列表文档中)最终喜欢支持多个用户参与同一个列表,我不想引入冲突.
在EntityRelationships上阅读CouchDB wiki之后,我已经确定设置关系文档可能是最好的解决方案.
{
"_id": "2600emu",
"type": "game"
}
Run Code Online (Sandbox Code Playgroud)
{
"_id": 123,
"title": "Emulators",
"user_id": "dstaley",
"type": "list"
}
Run Code Online (Sandbox Code Playgroud)
{
"_id": "98765456789876543",
"type": "relationship",
"list_id": 123,
"game_id": "2600emu"
}
Run Code Online (Sandbox Code Playgroud)
但是,根据我的理解,这不允许我在一个请求中获取列表的元数据和游戏的元数据.有什么建议?
从蒙戈切换到pouchdb(与Cloudant),我喜欢"每个用户一个数据库"的概念,但有一个方法来创建每个数据库的多个集合/表?
例
- Peter
- History
- Settings
- Friends
- John
- History
- Settings
- Friends
Run Code Online (Sandbox Code Playgroud)
等等...
谢谢
我希望人们能够私下共享文档,使用带有随机ID的链接,就像我在发送到pastebin的私人链接后得到的那样.我想知道CouchDB和Cloudant的一般情况.
我想使用cloudant db使用选择器进行查询,例如如下所示:用户希望借入其数量超过数字的借阅,如何在cloudant选择器中访问数组以查找特定记录
{
"_id": "65c5e4c917781f7365f4d814f6e1665f",
"_rev": "2-73615006996721fef9507c2d1dacd184",
"userprofile": {
"name": "tom",
"age": 30,
"employer": "Microsoft"
},
"loansBorrowed": [
{
"loanamount": 5000,
"loandate": "01/01/2001",
"repaymentdate": "01/01/2001",
"rateofinterest": 5.6,
"activeStatus": true,
"penalty": {
"penalty-amount": 500,
"reasonforPenalty": "Exceeded the date by 10 days"
}
},
{
"loanamount": 3000,
"loandate": "01/01/2001",
"repaymentdate": "01/01/2001",
"rateofinterest": 5.6,
"activeStatus": true,
"penalty": {
"penalty-amount": 400,
"reasonforPenalty": "Exceeded the date by 10 days"
}
},
{
"loanamount": 2000,
"loandate": "01/01/2001",
"repaymentdate": "01/01/2001",
"rateofinterest": 5.6,
"activeStatus": true,
"penalty": {
"penalty-amount": …Run Code Online (Sandbox Code Playgroud)