请问如何使用mongoose查询内嵌数据呢

发布于 2022-09-07 19:45:12 字数 587 浏览 13 评论 0

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

数据结构如上,现在是想匹配name和clubnumber,来查询库下的所有memo

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

小弟这样写的话,控制台出来的数据是

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

小弟想得到的数据结构是


    {memos1,memos2,memos3}//所有memos的一个数组

小弟现在能想到用遍历重新创建一个数组,但是有大神知道mongoose有什么操作能直接获得这样的吗,感激不尽~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

差↓一点笑了 2022-09-14 19:45:12

两种做法:

1、在创建数组模型的时候去掉_id的选项。
//定义
const userChildSchema = new Schema(
    { memos: { type: String } },
    { _id: false } //子对象里去掉_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)
    }
);

返回结果:

clipboard.png

2、mongo里可以只返回匹配的数组中的记录。

具体做法参考:mongo官网

注:
  • 以上是本机运行的结果。
  • 使用的mongoose版本为:5.2.5
  • mongo版本为:3.4
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文