Mongodb經過條件查詢後取得的是整份文件?
仅有的幸福
仅有的幸福 2017-05-02 09:24:53
0
2
701

例如有組資料:

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文件可參閱麼?

仅有的幸福
仅有的幸福

全部回覆(2)
刘奇

題主問的這個問題其實是和Data Model和業務查詢上的權衡有關聯。

1、MongoDB 每次回傳的基本上是以文件 document為單位的,如果文件中包含陣列(Array),也是需要傳回所有陣列的;

2、如題主所願,如果想按照查詢條件,只是返還數組中的滿足條件的數據,可以考慮

1)重新设计data model,不使用数组嵌套;

2)使用$unwind,将数组按照Flat展开,可以参考下面这个帖子:     

/q/10...

供參考。

Love MongoDB! Have Fun!

------------------------華麗的分割符--------------------- -----------

MongoDB中文社群線下活動繽紛,請猛戳下方:

2017華山論劍|MongoDB中文社群

三月杭州站在即! ! ! 有興趣的朋友火速報名! ! !

漂亮男人
> 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...

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板