在这种情况下使用objectId而不是mongodb中的字符串验证?

时间:2017-11-09 18:42:30

标签: node.js database mongodb validation nosql

在评论集合中插入时,验证失败错误。

我有3个收藏(规则,页面和评论)。

规则收集: - {validator:{$或:[{r_name:{$ type:" string"}}]}}

页面收藏: - {validator:{$或:[{url:{$ type:" string"}}]}}

评论集: - {validator:{$或:[{rule_id:{$ type:' objectId' },{page_id:{$ type:' objectId' }}}}

在评论集合中插入: -

process
    .myDb
    .comment
    .insertOne({
        rule_id: "5a035eb6eea8b4ba363e6f8d",
        page_id: "5a035effeea8b4ba363e6f8e"
    })
    .then(resp => {
        console.log('Success');
    })
    .catch(() => {
        // HERE i am getting "Document failed validation"
        console.log('Error');
    });

疑惑: -

  • 我不确定在这种情况下用于评论收集的验证类型。
  • 验证$ type objectId&的区别是什么?串。 据我所知,objectId是二进制的,但字符串将是字符数组实现。
  • 何时使用objectId?
  • 在RDBMS中我们将创建一个外键如何在MongoDB中实现相同的功能。
  • 这可以通过mongoose插件解决,但由于其他一些原因我无法使用它。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

您传入的字符串中您的验证器需要ObjectIds。但是,您可以使用ObjectId(stringValue)从给定字符串计算相应的ObjectId。

在您的代码中:

process
  .myDb
  .comment
  .insertOne({
    rule_id: ObjectId("5a035eb6eea8b4ba363e6f8d"),
    page_id: ObjectId("5a035effeea8b4ba363e6f8e")
  })
  .then(resp => {
    console.log('Success');
  })
  .catch(() => {
    // HERE i am getting "Document failed validation"
    console.log('Error');
  });

您可能需要在ObjectId()前加上模块名称,具体取决于您导入mongoDB的方式等,但您明白了。

请参阅here以供参考。