Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在我的mongoose模型的这个实例中循环遍历这个数组?_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 如何在我的mongoose模型的这个实例中循环遍历这个数组?

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

这是mongodb建模模式的定义

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();