gpt4 book ai didi

javascript - 在 mongodb 中合并不同的文档

转载 作者:行者123 更新时间:2023-12-03 00:03:59 25 4
gpt4 key购买 nike

我想组合不同的文档并使用 Promises 从 mongodb 数据库中检索它们。

所以我有一个作者的author_id,并且想显示该作者拥有的所有书籍以及它们存储在哪个图书馆以及它们是否可用。这是在 axpress 服务器中使用 pug 渲染页面。

我首先查找作者,然后我想浏览图书馆并搜索所有可用的书籍结束如果该书的作者与我们搜索的作者相同我想显示它是否在哪个图书馆中找到以及是否在可用或不可用列表中找到它。

   var AuthorSchema = new Schema(
{
first_name: {type: String, required: true, max: 100},
family_name: {type: String, required: true, max: 100},
date_of_birth: {type: Date},
date_of_death: {type: Date},
});

var BookSchema = new Schema(
{
title: {type: String, required: true},
author: {type: Schema.Types.ObjectId, ref: 'Author', required: true},
summary: {type: String, required: true},
isbn: {type: String, required: true},
genre: [{type: Schema.Types.ObjectId, ref: 'Genre'}]
});
var library = new Schema({

name:{type:String,required:true},
available_books:[{type:Schema.Types.ObjectId,ref:'Book'}],
unavailable_books:[{type:Schema.Types.ObjectId,ref:'Book'}]
});

//this is the code I came up with,
new Promise((resolve,reject)=>{
author.findById(id).exec(function(err,author){
if(err) reject(err)
else resolve(user)

}
})
.then(author => {
// stuck here, probs search all the library their available books eend for each book check if the author is the same.




}

我如何将书籍与其所在的图书馆名称以及它们是否可用(因此每列旁边的 3 列)映射到书籍名称、图书馆名称以及它们是否可用。

最佳答案

解决这个问题有两种主要方法:

  1. 使用聚合框架的 $lookup 让 mongo 将这些集合合并为一个结果:How to join multiple collections with $lookup in mongodb
  2. 使用应用端代码组合集合(这是 pseduocode):
const books = await Books.find(authorId);
const bookObjectIds = books.map(({_id}) => _id);
const libraries = await Library.find({$or: [
{available_books: {$in: bookObjectIds} },
{unavailable_books: {$in: bookObjectIds} },
]});
...combine books & libraries into your desired format

关于javascript - 在 mongodb 中合并不同的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55049665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com