【问题标题】:insert many don’t working in mongo DB why?插入许多在 mongoDB 中不起作用,为什么?
【发布时间】:2020-01-21 06:34:25
【问题描述】:

我正在尝试使用 mongoose 的 .it 将许多插入到 mongoDB 中。它只保存 one collection 只是为什么 这是我的代码 https://codesandbox.io/s/gallant-solomon-o91wp

我就这样保存

app.get("/saveData", async () => {
  try {
    const data = [
      {
        empid: "test123",
        date: "19-Jul-2019"
      },
      {
        empid: "test13",
        date: "18-Jul-2019"
      },

      {
        empid: "test13",
        date: "11-Jul-2019"
      }
    ];
    console.log("before save");
    let saveBlog = await BlogPostModel.collection.insertMany(data, {
      checkKeys: false
    }); //when fail its goes to catch
    console.log(saveBlog); //when success it print.
    console.log("saveBlog save");
  } catch (error) {
    console.log(error);
  }
});

尝试获取这样的数据

app.get("/filter", async (req, res) => {
  try {
    let filterBlog = await BlogPostModel.find({});
    //when fail its goes to catch
    console.log(filterBlog); //when success it print.
    res.send(filterBlog);
  } catch (error) {
    console.log(error);
  }
});

只显示一个文档

【问题讨论】:

标签: javascript node.js mongodb mongoose mongoose-schema


【解决方案1】:

因此,正如我所怀疑的,您创建的集合中还有一个索引,即blogposts。索引是id [键id 名称id_1]。 这是你的整个项目,我在故障中添加了。

Demo

在这里我还添加了一个 api /indexes ,这将检索集合的所有索引。默认情况下_id 应该在那里,之后添加额外的索引。所以在这里你可以看到id,它需要是唯一的。

我对您的代码做了一些改动。

路由/saveData 现在可以插入记录。它有一个名为id 的字段,这是独一无二的。

但是,现在位于 /saveData_old 的旧路由会报错,因为没有表示此索引键 [id] 的键。 [同样插入后,id为null,rest会失败,只会造成重复]

现在您可以使用具有唯一值的 id 键,或者如果您不需要,也可以删除索引。你可以在here找到一个关于如何删除索引的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多