[英]Finding embedded documents in 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
}
在這種情況下我該怎么做? 將Schema拆分為兩個集合不是一種選擇,因為這會破壞我們在其他更頻繁的查詢上的性能。
這可以在mongo shell中重現:
> db.xx.find().pretty()
{
"_id" : ObjectId("51610020672afd480ccfb9c4"),
"name" : "any",
"subsets" : [
{
"number" : 3,
"name" : "aba"
},
{
"number" : 4,
"name" : "aka"
}
]
}
> // works as expected:
> db.xx.find({"subsets.number": 3},{_id:0, "subsets.$":1})
{ "subsets" : [ { "number" : 3, "name" : "aba" } ] }
> // does not work
> db.xx.find({"subsets.name": /k/},{_id:0, "subsets.$":1})
error: {
"$err" : "positional operator (subsets.$) requires corresponding field in query specifier",
"code" : 16352
}
但這很有效!
> db.xx.find({"subsets": {$elemMatch:{name:/k/}}},{_id:0, "subsets.$":1})
{ "subsets" : [ { "number" : 4, "name" : "aka" } ] }
@AlexKey:我已相應更新了您的Jira SERVER-9028
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.