i've got some documents like this:
{
"name" : "xxx",
"address" : " ",
"mail" : "",
"url" : "",
"pos" : {
"lat" : yyy,
"lng" : zzz
},
"rooms" : [
{
"_id" : ObjectId("540ce3f8e4b016292085b387"),
"supplier" : "s1",
"price" : 41000,
"details" : [
{
"price" : 25200,
"key" : "2-1"
},
{
"price" : 15800,
"key" : "2-0"
}
]
},
{
"_id" : ObjectId("540ce3f8e4b016292085b3fd"),
"supplier" : "s2",
"price" : 44900,
"details" : [
{
"price" : 27000,
"key" : "2-1"
},
{
"price" : 17900,
"key" : "2-0"
}
]
},
{
"_id" : ObjectId("540ce3f8e4b016292085b53d"),
"supplier" : "s3",
"price" : 53500,
"details" : [
{
"price" : 32100,
"key" : "2-1"
},
{
"price" : 21400,
"keykey" : "2-0"
}
]
}
]
}
What i need to do is execute a find with some filters AND price range query to fetch just the matching array elements and not all:
This is what i try:
var sort = {};
var query = {name:new RegExp("xx",'i')};
query['$and'] = [{'rooms.price':{$gt:50000}},{'rooms.price':{$lt:100000}}];
var page = 1;
var ppp = 20;
db.collection("myCollection").
find(query).
sort(sort).
skip(page > 0 ? ((page-1)*ppp) : 0).limit(ppp).toArray(function(err, docs) {
res.send(docs);
});
and i retrieve the same document.
What i need is :
{
"name" : "xxx",
"address" : " ",
"mail" : "",
"url" : "",
"pos" : {
"lat" : yyy,
"lng" : zzz
},
"rooms" : [
{
"_id" : ObjectId("540ce3f8e4b016292085b53d"),
"supplier" : "s3",
"price" : 53500,
"details" : [
{
"price" : 32100,
"key" : "2-1"
},
{
"price" : 21400,
"keykey" : "2-0"
}
]
}
]
}
I googled about but i find just aggregate or map/reduce element.
I'd like to avoid it.
Is there a good solution??
Thanks!