我使用 Mongoose ,并希望能够动态更新数组,包括所有其他领域。
在我下面的Schema中,我希望能够用正确的值修改“dynamic_title”。
import mongoose from "mongoose";
const bookSchema = new mongoose.Schema({
dynamic_title: {
thumbnail_url: String,
details: {
title: String,
by_statement: String,
publishers: [String],
description: {
type: String,
value: String,
},
publish_date: String,
series: [String],
identifiers: {
amazon: [String],
},
languages: [
{
key: String,
},
],
isbn_10: [String],
isbn_13: [String],
},
},
});
export const Book = mongoose.model("book", bookSchema);
这是我的index.js
import axios from "axios";
import logSymbols from "log-symbols";
import mongoose from "mongoose";
import { ISBN } from "./models/isbn.js";
import { Book } from "./models/book.js";
const database = 'MONGO_URL';
mongoose.connect(database, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
async function process() {
try {
const isbnData = await ISBN.find().lean();
for (const doc of isbnData) {
const id = doc.isbn13;
const url = `https://openlibrary.org/api/books?bibkeys=ISBN:${id}&jscmd=details&format=json`;
const response = await axios.get(url);
const data = response.data;
await Book.insertMany(data);
console.log(`${logSymbols.success} ${id} processed.`);
}
console.log(`${logSymbols.success} All documents processed.`);
} catch (error) {
console.error(logSymbols.error, error);
}
}
process();
最后,这是我试图插入的数据类型。每个不同的数据片段都有一个“ISBN:”,其中包含所有其他元素,我希望能够更新这个元素。否则我就无法访问数据。
JSON data
当我尝试使用一个不包含Array的Schema时,它将返回空Schema。
Database/Result
1条答案
按热度按时间v440hwme1#
不确定您是否知道这一点,但您需要传递一个以您的模式定义方式结构化的对象。例如,当你调用:
你的
data
对象需要是一个格式化对象数组,与你的schema中的key:value
对对齐。对象应该如下所示:不能只传递
await axios.get(url);
调用返回的数据。这与数据库所需的数据结构不同。从安全的Angular 来看,您也不希望将数据从第三方直接传递到数据库中。验证要使用的每个值是否是您期望的正确数据格式,并在可能的情况下进行清理。最后,我希望我理解了你的问题,但是你不能动态地设置
dynamic_title
,因为在你的模式中这看起来像一个key
,而不是一个value
。