mongoose 数据查询问题?

发布于 2022-09-11 15:31:05 字数 856 浏览 20 评论 0

需求描述:
mongodb中有两个collection,theme存储主题的主要信息,同时包含有产品id的数组,现在想通过产品的详细id找出products中产品的详细信息,应该如何查询呢?或者有更好的设计思想吗?

theme(主题)

{
    'thmemId':'001',
    'title':'theme1',
    'productsId':[1,2,5]
}

products(产品)

{
    'id':'1',
    'title':'玩具',
    'price':25
},
{
    'id':'2',
    'title':'鲜花',
    'price':12
},
{
    'id':'5',
    'title':'电脑',
    'price':4000
}

最终想实现的效果如下:

{
    'thmemId':'001',
    'title':'theme1',
    'productsId':[
        {
            'id':'1',
            'title':'玩具'
            'price':25
        },
        {
            'id':'2',
            'title':'鲜花'
            'price':12
        },
        {
            'id':'5',
            'title':'电脑'
            'price':4000
        }
    ]
}

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

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

发布评论

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

评论(3

是你 2022-09-18 15:31:05

写一个伪代码,不知道能否满足你的需求.

var theme = {
    'thmemId':'001',
    'title':'theme1',
    'productsId':[1,2,5]
}
products.find({id: {$in:theme.productsId}}).then(rs=>{
    theme.productsId = rs;
})
一袭水袖舞倾城 2022-09-18 15:31:05

populate

var themeSchema = Schema({
   ...
  productsId: [{ type: Number, ref: 'Products' }] //官方推荐ObjectId
});

var productsSchema = Schema({
    _id: Number,//ObjectId
});

var Theme = mongoose.model('Theme', themeSchema);
var Products = mongoose.model('Products', productsSchema);

Theme.
  findOne({ thmemId: '001' }).
  populate('productsId').
  exec(function (err, story) {
    if (err) return handleError(err);
  });

使用populate查询处理的数据会到Products查找然后自动填充到productsId里面

心房的律动 2022-09-18 15:31:05

思路:我觉得一个product的数据是一个改动频率不是很大甚至没有的数据,所以我觉得可以把product的数据直接到到theme下面如

{
    'thmemId':'001',
    'title':'theme1',
    'products':[
        {
            'id':'1',
            'title':'玩具',
            'price':25
        },
        {
            'id':'2',
            'title':'鲜花',
            'price':12
        },
        {
            'id':'5',
            'title':'电脑',
            'price':4000
        }
    ]
}

如果你想改动某个product的数据。你只要改了product表里的,再去theme里找有没有这个product的一起改了就行了。
如果你改动不了数据结构,或者觉得改动数据结构会有其他问题。那就查询吧,用Aggregation Pipeline,先$unwind,再$lookup,再$group就行了,我给你api,你自己看吧
Aggregation Pipeline

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文