У меня есть эта модель мангуста:
var mySubEntitySchema = new Schema({
property1: String,
property2: String
});
var myEntitySchema = new Schema({
name: String,
sub: [mySubEntitySchema]
});
export var MyEntityModel: mongoose.Model<MyEntityDocument> = mongoose.model<MyEntityDocument>("MyEntity", myEntitySchema);
Теперь я хочу получить конкретный MyEntityDocument, для которого у меня есть _id, но только с вложенными документами, соответствующими property1 = "example".
Есть ли способ сделать это?
Я попробовал решение с помощью Aggregate, но безуспешно:
MyEntityModel.aggregate([
{$match: { "_id": myId, "sub.property1":"example" }},
{$unwind: "$sub"},
{$match: { "sub.property1":"example"}},
{$group: {"_id":"$_id","subs":{$push:"$sub"}}}
], (error, result) => {
console.log("Result = " + JSON.stringify(result));
}
});
Но ничего не возвращает. Если я не поставлю "_id": myId в первое предложение $match, то я получу результаты, но мне нужен только один результат, соответствующий имеющемуся у меня _id.
Кто-нибудь знает, как я могу это сделать?
РЕДАКТИРОВАТЬ: Как и просили, вот пример.
С этими данными:
{
"_id": "54c12276fcb2488d300795e4",
"name": "a",
"sub": [
{
"_id": "54c12276fcb2488d300795e0",
"property1": "example",
"property2": "something"
},
{
"_id": "54c12276fcb2488d300795e1",
"property1": "notmuch",
"property2": "somethingelse"
},
{
"_id": "54c12276fcb2488d300795e2",
"property1": "notinteresting",
"property2": "something"
},
{
"_id": "54c12276fcb2488d300795e3",
"property1": "example",
"property2": "anotherthing"
}
]
},
{
"_id": "54c12277fcb2488d300795e5",
"name": "b",
"sub": [
{
"_id": "54c12276fcb2488d300795e6",
"property1": "example",
"property2": "word"
}
]
}
Мне нужен объект с _id "54c12276fcb2488d300795e4" и поддокументы, соответствующие property1 = "example". Итак, ожидаемый результат:
{
"_id": "54c12276fcb2488d300795e4",
"name": "a",
"sub": [
{
"_id": "54c12276fcb2488d300795e0",
"property1": "example",
"property2": "something"
},
{
"_id": "54c12276fcb2488d300795e3",
"property1": "example",
"property2": "anotherthing"
}
]
}