例如有組資料:
name: 'food',
data: {
fruit: [
{
name: 'apple',
stock: 10
},
{
name: 'pear',
stock: 66
}
...
]
}
db.col.find({'data.fruit.stock': 66}, {data.fruit.stock: 1})
查詢到的是整個data.fruite
;
Q1: 有什麼方法只取得過濾器查詢的那條資料嗎?如果這個文檔物件量比較大咋辦?
Q2: 這是Mongodb的特性?命中過濾器的條件後,回傳的是整個文件物件?
Q3: 有這方面的API文件可參閱麼?
怪我咯2017-05-02 09:26:53
題主問的這個問題其實是和Data Model和業務查詢上的權衡有關聯。
1、MongoDB 每次回傳的基本上是以文件 document為單位的,如果文件中包含陣列(Array),也是需要傳回所有陣列的;
2、如題主所願,如果想按照查詢條件,只是返還數組中的滿足條件的數據,可以考慮
1)重新设计data model,不使用数组嵌套;
2)使用$unwind,将数组按照Flat展开,可以参考下面这个帖子:
/q/10...
供參考。
Love MongoDB! Have Fun!
------------------------華麗的分割符--------------------- -----------
MongoDB中文社群線下活動繽紛,請猛戳下方:
2017華山論劍|MongoDB中文社群
三月杭州站在即! ! ! 有興趣的朋友火速報名! ! !
漂亮男人2017-05-02 09:26:53
> db.example.find().pretty()
{
"_id" : ObjectId("58b50cd6a7329db9121efa00"),
"name" : "food",
"data" : {
"fruit" : [
{
"name" : "apple",
"stock" : 10
},
{
"name" : "pear",
"stock" : 66
}
]
}
}
> db.example.find({'data.fruit.stock':66}, {'data.fruit.stock': 1}).pretty()
{
"_id" : ObjectId("58b50cd6a7329db9121efa00"),
"data" : {
"fruit" : [
{
"stock" : 10
},
{
"stock" : 66
}
]
}
}
確實會回傳data.fruit資料的stock;但也可以傳回條件的stock,但要知道stock在fruit陣列的index數.
即
{'data.fruit.1.sock': 1}
參考(mongodb 版本 3.4):
https://docs.mongodb.com/manu...
https://docs.mongodb.com/manu...