【发布时间】:2015-01-13 18:54:21
【问题描述】:
我需要通过Owner、Manager 或Team Members 之一找到一个项目。架构如下所示:
var project = new mongoose.Schema({
title: { type: String, require: true },
slug: { type: String, require: true },
description: { type: String, require: true },
descriptionHtml: { type: String, require: true },
nextVanityId: { type: Number, default: 1 },
owner: { type: ObjectId, ref: 'Member', require: true },
teams: [{ type: ObjectId, ref: 'Team' }],
managers: [{ type: ObjectId, ref: 'Member' }]
};
var team = new mongoose.Schema({
name: { type: String, require: true },
slug: { type: String, require: true },
project: { type: ObjectId, require: true, ref: 'Project' },
created: { type: Date, require: true, default: Date.now },
members: [{ type: ObjectId, default: null, ref: 'Member' }]
};
我的查询方法如下:
function findByMember (member, done) {
var id = member._id;
Project
.find()
.or([
{ owner: id },
{ managers: id },
{ 'teams.members': id }
])
.exec(done);
}
目前它适用于所有者和经理,但在查询每个团队的成员集合时我正在绘制空白。我应该使用什么?
【问题讨论】:
-
您正在搜索不存在的
Product.teams.members。你的意思是要搜索(sudo)or: ["Project.owner", "Project.managers", "Team.members"]? -
Nico 你的
teams属性只是对另一个文档的引用。在进行查询时,mongo 不知道teams有一个members属性。要进行查询,您需要将teams创建为嵌入文档。 -
对不起,我错过了第一句话...在您当前的设置中,您需要通过
members: id查询Team,然后通过or: [{owner: id}, {managers: id}, {teams: teamQueryResponse._id}]查询Project。跨度>