Я думаю, вы должны поместить _id
s в created_by
и modified_by
:
{ "_id": "u1", "type": "user", "email":"u1@gmail.com" ... }
{ "_id": "u2", "type": "user", "email":"u2@gmail.com" ... }
{ "_id": "u3", "type": "user", "email":"u3@gmail.com" ... }
{ "_id": "u4", "type": "user", "email":"u4@gmail.com" ... }
{ "_id": "anitem", "type": "item", "title":"My title",
created_by:"u1", modified_by:"u3" }
, чтобы вы могли использовать следующую функцию карты и запросить ее с помощью ?key="anitem"&include_docs=true
:
function(doc) {
if (doc.type === "item") {
emit(doc._id, 1);
emit(doc._id, { _id: doc.created_by });
emit(doc._id, { _id: doc.modified_by });
}
}
Вы можете прочитать пост Яна Ленхардта об этом для более подробной информации.
В качестве примечания, я обычно помещаю тип в _id
, чтобы его было легче получитьуникальные ключи, и вам не нужно представление, если вы хотите фильтровать только по типу:
{ "_id": "user/username1", "email":"u1@gmail.com" ... }
{ "_id": "user/username2", "email":"u2@gmail.com" ... }
{ "_id": "user/username3", "email":"u3@gmail.com" ... }
{ "_id": "user/username4", "email":"u4@gmail.com" ... }
{ "_id": "item/itemid1", "title":"My title",
created_by:"user/username1", modified_by:"user/username3" }
и функция карты -
function(doc) {
if (doc._id.slice(0, 4) === "item/") {
emit(doc._id, 1);
emit(doc._id, { _id: doc.created_by });
emit(doc._id, { _id: doc.modified_by });
}
}
ОБНОВЛЕНИЕ: Из-за ошибки COUCHDB-1229 , использование /
в doc._id
может вызвать проблемы.В зависимости от вашего варианта использования может быть лучше использовать другой разделитель, например :
или _
.