我有这个模特
const BlockModel = Mongoose.model('blocks', {
height: Number,
size: Number,
time: Number
})
此API调用(hapi.js)
server.route({
method: "GET",
path: "/api/blockinfo",
handler: async (request, h) => {
await BlockModel.deleteMany({})
const { res, payload } = await Wreck.get('https://someurl');
let myJson = JSON.parse(payload.toString()).blocks
// console.log(myJson)
for (let i = 0; i < myJson.length; i++) {
var block = new BlockModel({
height: myJson[i].height,
size: myJson[i].size,
time: myJson[i].time
});
block.save();
}
console.log(BlockModel.find({}))
return BlockModel.find({}); //returns an empty array
}
})
因此,它基本上删除了集合的内容,然后将新数据上传到其中。我想返回该集合,以便将其显示在我的API中。但是BlockModel.find({})
返回的是一个空集合,尽管如果我使用mongo控制台并检查
db.blocks.find({})
答案 0 :(得分:0)
您可以使用insertMany创建所需的块。此方法将直接向您返回新插入的数据。
async(request, h) => {
await BlockModel.deleteMany({});
const {
res,
payload
} = await Wreck.get('https://someurl');
const myJson = JSON.parse(payload.toString()).blocks
// Create new items and save them into the database.
// insertMany returns the added blocks
return BlockModel.insertMany(myJson.map(x => ({
height: x.height,
size: x.size,
time: x.time
})));
}
如果myJson看起来像:
[{
height,
size,
time,
}]
您可以将代码转换为:
async(request, h) => {
await BlockModel.deleteMany({});
const {
res,
payload
} = await Wreck.get('https://someurl');
const myJson = JSON.parse(payload.toString()).blocks
// Create new items and save them into the database.
// insertMany returns the added blocks
return BlockModel.insertMany(myJson);
}
答案 1 :(得分:0)
尝试使用:
await block.save();
// wait to save block before return
// ....
const blocks = await BlockModel.find({})
console.log(blocks)
return blocks;
我认为您的代码运行正常(不是console.log
),因为您致电:
console.log(BlockModel.find({}))
它将记录一个Promise,而不是期望的对象。
我们将其存储在一个变量中,因为我们不需要两次调用查询。
答案 2 :(得分:-1)
将await
添加到save
通话中,
await block.save();