如何根据链接文档的某些条件查找文档

时间:2013-09-02 13:19:02

标签: node.js mongodb mongoose

我是MongoDB的新手,在查询某些文档集的链接文档时遇到问题。

这是我的数据库方案:

var tagScheme = Schema({
    name: { type: String, required: true }
});
tagScheme.index({ name: 1 }, { unique: true });


var linkScheme = Schema({
    name: { type: String },
    tags: [{ type: Schema.Types.ObjectId, ref: 'Tag' }]
});
linkScheme.index({ name: 1 }, { unique: true });

我需要计算指定标记的相应链接。我尝试执行以下查询:

dbschemes.Link.find({ 'tags.name': specifiedTagName }, function (err, links) {
    return res.send(500, err);
    alert(links.length);
});

此查询无法正常工作:它始终返回空链接列表。有人可以解释我的问题是什么吗?

1 个答案:

答案 0 :(得分:0)

正如JohnnyHK评论的那样,您要做的查询类型是关系类型查询,而文档数据库(如mongodb)根本不支持它们。修复你的模式,将标记数据直接放在链接模式中(从关系角度嵌套或“非规范化”,在这种情况下可以),然后你可以查询它:

var LinkSchema = new Schema({
  name: String,
  tags: [String]
});

使用该Schema,您的查询将按预期工作。

解决以下评论。这是一个文档数据库。这不是关系型的。有权衡。您的数据被去规范化,它为您提供了一些可扩展性和性能,并且您可以权衡查询的灵活性和数据一致性。如果你想重命名一个标签,这是一个相对罕见的事情,你必须做一个惊人的2个数据库命令($ new推出新名称,然后是旧名称的$ pull),而不是单个更新命令的关系会做的。