0

我是 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);
});

这个查询不能正常工作:它总是返回一个空的链接列表。有人可以解释一下问题是什么吗?

4

1 回答 1

0

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

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

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

为了解决下面的评论。这是一个文档数据库。这不是关系。有取舍。您的数据是非规范化的,它为您提供了一些可扩展性和性能,并且您需要权衡查询的灵活性和数据一致性来获得它们。如果你想重命名一个标签,这是一种相对罕见的情况,你必须执行多达 2 个数据库命令(新名称的 $push 然后旧名称的 $pull),而不是单个更新命令的关系会做的。

于 2013-09-02T15:42:10.977 回答