Javascript 如何在我的mongoose模型的这个实例中循环遍历这个数组?
这是mongodb建模模式的定义Javascript 如何在我的mongoose模型的这个实例中循环遍历这个数组?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,这是mongodb建模模式的定义 const postSchema = new mongoose.Schema({ post:[ {postId: String}, {commentComponent: [ {comment: [String]}, ]} ] }) const Posts = mongoose.model('Posts', postSchema) const postLinks=等待getPostL
const postSchema = new mongoose.Schema({
post:[
{postId: String},
{commentComponent: [
{comment: [String]},
]}
]
})
const Posts = mongoose.model('Posts', postSchema)
const postLinks=等待getPostLinks();
const posts=新职位({
对于(设i=0;i
是否有一种在这个实例中进行迭代的方法,因为这里的for循环不起作用根据您的代码示例,我不确定您试图做什么。当使用模型并尝试创建时,可以将其视为新的单一记录。如果您试图在一条记录中插入多个链接,我建议用逗号分隔它们,然后将它们插入MongoDB 但是不能像这样在Posts类中迭代 如果我是你,我会像这样设置我的文件: 文件:models/Post.js:
const postLinks = await getPostLinks();
const posts = new Posts({
for (let i = 0; i < postLinks.length; i++) {
const comment = await getComment(postLinks[i]) // here it takes postLinks as a paramaeter to get an array of comment
post: [
{postId: postLinks[i]},
{commentComponent: [
{comment: comment}
]}
]
}
})
const result = await posts.save()
然后创建一个控制器js文件
文件:controllers/posts.js:
const mongoose = require('mongoose');
const PostSchema = new mongoose.Schema({
text: {
type: String,
trim: true,
required: [true, 'Please add some text']
},
link: {
type: String,
required: [true, 'Please add link']
},
createdAt: {
type: Date,
default: Date.now
}
});
module.exports = mongoose.model('Post', PostSchema);
然后在路由器文件中,您可以使用控制器:
routes/post.js
const Post = require('../models/Post');
// @desc Add Post
// @route POST /api/v1/posts
// @access Public
exports.addPost = async (req, res, next) => {
try {
// get post data from the request
// mongo returns a promise so await on it
const post = await Post.create(req.body);
return res.status(201).json({
success: true,
data: post
});
} catch (err) {
if(err.name === 'ValidationError') {
const messages = Object.values(err.errors).map(val => val.message);
return res.status(400).json({
success: false,
error: messages
});
} else {
return res.status(500).json({
success: false,
error: 'Server Error'
});
}
}
}
您需要使用名为
post
的属性(该属性可能应称为Posts
,但将保留下面的原始名称)将对象传递给Posts
构造函数,并且对于该属性,您需要指定一个数组
此阵列可以使用和构建:
但是,如果您愿意,您也可以使用传统的for循环(与您尝试执行的操作更为相似):
const post=[];
对于(设i=0;i
const express = require('express');
const router = express.Router();
const { addPost } = require('../controllers/posts');
router
.route('/')
.post(addPost);
module.exports = router;
const post = await Promise.all(
postLinks.map(async (postLink) => {
const comment = await getComment(postLink);
return {
postId: postLink,
commentComponent: [{ comment }],
};
})
);
const posts = new Posts({ post });
const result = await posts.save();
const post = [];
for (let i = 0; i < postLinks.length; i++) {
const comment = await getComment(postLinks[i]);
post.push({
postId: postLinks[i]},
commentComponent: [{ comment }]
});
}
const posts = new Posts({ post });
const result = await posts.save();