node.js - 使用表 B 获取表 A 值,其中 A.field_name = B.field_name
问题描述
在后端,我使用猫鼬、快递和节点 js。我想在 mongodb 中加入。如果这是 SQL,那并不难。因为我是 mongo 数据库的新手。这对我来说是个问题。我已经在这个平台上尝试了很多答案,但没有一个对我的情况有帮助。
我的数据库中有以下两个模式。
物品
import mongoose from 'mongoose';
const Schema = mongoose.Schema;
export const item_schema = new Schema({
item_no: {
type: String
},
name: {
type: String
},
item_category: {
type: String
},
no_of_copies: {
type: Number
},
public_or_rare: {
type: String
},
user_no: {
type: String
}
});
书
import mongoose from 'mongoose';
const Schema = mongoose.Schema;
export const book_schema = new Schema({
item_no: {
type: String
},
isbn_no: {
type: String
},
author: {
type: String
},
published_year: {
type: Number
},
publisher: {
type: String
},
book_category: {
type: String
}
});
请注意,这些模型中没有错误,因为它们与我的 API 中的其他控制器一起运行良好
我想将书籍和项目表数据作为一个对象获取,其中书籍和项目共享相同的 item_no
到目前为止,为了实现我的目标,我尝试了以下代码,
export const get_books_all_details = (req, res) => {
Book.find({}, (err, book) => {
if (err) {
res.send(err);
}
else {
let my_book = book;
// res.json(my_book);
Item.findOne({ item_no: my_book.item_no }, (err, item) => {
//Item.find({}, (err, item) => {
if (err) {
res.send(err);
}
else {
let my_item = item;
//res.send(my_book+my_item);
res.json({
/* item_no: my_item.item_no,
item_name: my_item.item_name,
item_category: my_item.item_category,
no_of_copies: my_item.no_of_copies,
public_or_rare: my_item.public_or_rare,
isbn_no: my_book.isbn_no,
author: my_book.author,
published_year: my_book.published_year,
publisher: my_book.publisher,
book_category: my_book.book_category , */
book:my_book,
item:my_item
})
}
});
}
});
};
在顶部,我使用 find() 获取所有书籍,如果项目表中有与 item_no 匹配的记录,我也想获取该特定项目。这就是为什么我在 find() 中使用 findOne() 我不知道是对还是错!
所以这个新人等待你们的帮助,真的很感激。如果您能帮助我提供代码和解释,那就太好了!
解决方案
我想在 mongodb 中加入
只是不要。MongoDB 是一个 NoSQL 数据库,专门为避免连接和强制数据非规范化而构建。如果您需要加入一个文档,请将其放在另一个文档中。如果您像在任何 SQL 数据库中一样在 MongoDB 中构建集合,那么您将拥有一个不符合 ACID 的关系数据库,这很危险。