fra*_*rxu 2 couchdb view node.js cradle
假设我有一个用couchDB保存的文档,文档看起来像这样:
{
"email": "lorem@gmail.com",
"name": "lorem",
"id": "lorem",
"password": "sha1$bc5c595c$1$d0e9fa434048a5ae1dfd23ea470ef2bb83628ed6"
}
Run Code Online (Sandbox Code Playgroud)
我希望能够通过'id'或'email'查询文档.因此,当我将其保存为视图时,我会这样写:
db.save('_design/users', {
byId: {
map: function(doc) {
if (doc.id && doc.email) {
emit(doc.id, doc);
emit(doc.email, doc);
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
然后我可以这样查询:
db.view('users/byId', {
key: key
}, function(err, data) {
if (err || data.length === 0) return def.reject(new Error('not found'));
data = data[0] || {};
data = data.value || {};
self.attrs = _.clone(data);
delete self.attrs._rev;
delete self.attrs._id;
def.resolve(data);
});
Run Code Online (Sandbox Code Playgroud)
它工作得很好.我可以通过id或加载数据email.但我不确定我是否应该这样做.
我有另一个解决方案,通过保存相同的文档与两个不同的视图,如,byId和byEmail,但这样我保存相同的文档两次,显然它将花费数据库的空间.
不确定哪种解决方案更好.
规范的解决方案是拥有两个视图,一个是电子邮件,一个是id.为了不浪费文档的空间,您可以只发出null作为值,然后在include_docs=true查询视图时使用查询参数.
此外,您可能希望使用_id而不是id.这样,CouchDB确保ID是唯一的,您不必使用视图来循环文档.
| 归档时间: |
|
| 查看次数: |
317 次 |
| 最近记录: |