鍍金池/ 問答/Java  數(shù)據(jù)庫(kù)  HTML/ 請(qǐng)問如何使用mongoose查詢內(nèi)嵌數(shù)據(jù)呢

請(qǐng)問如何使用mongoose查詢內(nèi)嵌數(shù)據(jù)呢

const userSchema = new Schema({
  name:{type:String},
  clubnumber:{type:String},
  memo:[{
    memos:{type:String}
  }]
})

數(shù)據(jù)結(jié)構(gòu)如上,現(xiàn)在是想匹配name和clubnumber,來查詢庫(kù)下的所有memo

db.userModel.findOne({name:name,clubnumber:clubnumber},(e,d)=>{
            console.log(d.memo);
        })

小弟這樣寫的話,控制臺(tái)出來的數(shù)據(jù)是

[
    { memos:xxx,id:xxxx},
    { memos:xxx1,id:xxxxx}
]

小弟想得到的數(shù)據(jù)結(jié)構(gòu)是


    {memos1,memos2,memos3}//所有memos的一個(gè)數(shù)組

小弟現(xiàn)在能想到用遍歷重新創(chuàng)建一個(gè)數(shù)組,但是有大神知道m(xù)ongoose有什么操作能直接獲得這樣的嗎,感激不盡~

回答
編輯回答
避風(fēng)港

兩種做法:

1、在創(chuàng)建數(shù)組模型的時(shí)候去掉_id的選項(xiàng)。
//定義
const userChildSchema = new Schema(
    { memos: { type: String } },
    { _id: false } //子對(duì)象里去掉_id
);

const userSchema = new Schema({
    name: { type: String },
    clubnumber: { type: String },
    memo: [userChildSchema]
});

//查詢
userModel.findOne({ name: "nameeeeee" },
    { "memo": 1 },  //select
    null,
    function (err, cursor) {
        console.log(cursor.toJSON().memo)
    }
);

返回結(jié)果:

clipboard.png

2、mongo里可以只返回匹配的數(shù)組中的記錄。

具體做法參考:mongo官網(wǎng)

注:
  • 以上是本機(jī)運(yùn)行的結(jié)果。
  • 使用的mongoose版本為:5.2.5
  • mongo版本為:3.4
2017年10月19日 13:34