たとえば、couchDB で保存するドキュメントがあり、そのドキュメントは次のようになります。
{
"email": "lorem@gmail.com",
"name": "lorem",
"id": "lorem",
"password": "sha1$bc5c595c$1$d0e9fa434048a5ae1dfd23ea470ef2bb83628ed6"
}
そして、「id」または「email」のいずれかでドキュメントを照会できるようにしたいと考えています。したがって、これをビューとして保存するときは、次のように記述します。
db.save('_design/users', {
byId: {
map: function(doc) {
if (doc.id && doc.email) {
emit(doc.id, doc);
emit(doc.email, doc);
}
}
}
});
そして、次のようにクエリできます。
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);
});
そして、それはうまく機能します。id
またはのいずれかでデータをロードできますemail
。しかし、そうすべきかどうかはわかりません。
byId
とのような2つの異なるビューで同じドキュメントを保存する別の解決策がありますbyEmail
が、この方法では同じドキュメントを2回保存すると、明らかにデータベースのスペースがかかります。
どちらのソリューションが優れているかはわかりません。