我是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);
});
此查询无法正常工作:它始终返回空链接列表。有人可以解释我的问题是什么吗?
答案 0 :(得分:0)
正如JohnnyHK评论的那样,您要做的查询类型是关系类型查询,而文档数据库(如mongodb)根本不支持它们。修复你的模式,将标记数据直接放在链接模式中(从关系角度嵌套或“非规范化”,在这种情况下可以),然后你可以查询它:
var LinkSchema = new Schema({
name: String,
tags: [String]
});
使用该Schema,您的查询将按预期工作。
解决以下评论。这是一个文档数据库。这不是关系型的。有权衡。您的数据被去规范化,它为您提供了一些可扩展性和性能,并且您可以权衡查询的灵活性和数据一致性。如果你想重命名一个标签,这是一个相对罕见的事情,你必须做一个惊人的2个数据库命令($ new推出新名称,然后是旧名称的$ pull),而不是单个更新命令的关系会做的。