Сложно изменить структуру данных, но, как вы хотите, только ваш соответствующий суб-документ, и вы не знаете, где находится ваш целевой документ (например, запрос должен быть на или Text2
, ...) там хорошая структура данных для этого:
{
"_id" : ObjectId("548dd9261a01c68fab8d67d7"),
"pair" : [
{
"id" : "2",
"key" : "Text1"
},
{
"id" : [
"2",
"3"
],
"key" : "Text2"
},
{
"id" : "1",
"key" : "Text3"
}
]
}
и ваш запрос:
db.myCollection.findOne({'pair.id' : "2"} , {'pair.$':1, _id : -1}).pair // there is better ways (such as aggregation instead of above query)
в результате вы будете иметь:
{
"0" : {
"id" : "2",
"key" : "Text1"
}
}
Update 1 (новичку путь)
Если вы хотите, чтобы все документы не только один использовать этот
var result = [];
db.myCollection.find({'pair.id' : "2"} , {'pair.$':1, _id : -1}).forEach(function(item)
{
result.push(item.pair);
});
// the output will be in result
Update 2
Используйте этот запрос, чтобы получить все поддокументы
db.myCollection.aggregate
(
{ $unwind: '$pair' },
{ $match : {'pair.id' : "2"} }
).result
он производит выход как
{
"0" : {
"_id" : ObjectId("548deb511a01c68fab8d67db"),
"pair" : {
"id" : "2",
"key" : "Text1"
}
},
"1" : {
"_id" : ObjectId("548deb511a01c68fab8d67db"),
"pair" : {
"id" : [
"2",
"3"
],
"key" : "Text2"
}
}
}
Генетического запроса для вашей структуры данных нет. В любом случае используйте db.b.find ({$ или: [{"Text1.id": '2'}, {"Text2.id": '2'}, {"Text3.id": '2'}]}) – Disposer
дает мне неожиданный токен:. что вы имеете в виду. Генриальный запрос для вашей структуры данных отсутствует? Разве это не то, как вы пишете json. Я видел его онлайн много раз – asdsd
Что вы ожидали от своего результата? – Disposer