我有一个嵌入文档数组的模型。这是由设计制作的,因为我们经常(几乎总是)查询根文档以及嵌入式文档。在Mongoose ODM中查找嵌入式文档
var SubsetSchema = new mongoose.Schema({
number: {
type: Number,
index: true,
unique: true,
},
name: String,
});
var RootSchema = new mongoose.Schema({
name: String,
subsets: [SubsetSchema],
});
mongoose.model('collection', RootSchema);
var Root = module.exports = mongoose.model('collection');
,并找到一个子集文件不是用一个问题:
Root.findOne({'subsets.number': 3}, {_id: 0, 'subsets.$': 1}, ...);
然而,当我需要找到多个子文件(和使用正则表达式我们的情况下),似乎并不可能:
Root.find({'subsets.name': /regex/i}, {_id: 0, 'subsets.$': 1}, ...);
它提供了以下错误:
error: {
"$err" : "positional operator (subsets.$) requires corresponding field in query specifier",
"code" : 16352
}
我在这种情况下会怎么做?将模式拆分为两个集合不是一种选择,因为这会破坏我们在其他更频繁的查询上的性能。
可能重复(http://stackoverflow.com/questions/15117030/how-to [如何与MongoDB的子文档滤波器阵列] -filter-array-in-subdocument-with-mongodb) – JohnnyHK 2013-03-20 13:03:53
@JohnnyHK这是错误的假设。请重新阅读我的问题以及您建议重复的问题。建议的重复问题是关于已经收到结果的“聚合”,这个问题是关于查询的。虽然这个问题如果是通过驱动程序完成的话可以通过聚合来解决,但在我的情况下(请仔细看看问题的标签和文本)解决方案是否需要Mongoose ODM,它对我来说根本不起作用。 – AlexKey 2013-03-21 14:05:53
@JohnnyHK顺便说一句,MongoDB JIRA有一个bug,https://jira.mongodb.org/browse/SERVER-9028因为这是自由和开放源码软件,所以我想一旦获得一点空闲时间,就可以研究这个问题。 – AlexKey 2013-03-21 14:15:16