【问题标题】:Manual Reference - ObjectId()手册参考 - ObjectId()
【发布时间】:2016-09-24 05:49:39
【问题描述】:

我正在为 Mongo 中的 _id 寻求帮助。我想手动设置一个 ObjectId() 引用,但我做不到。我检查了官方 mongo 文档中的代码并将其插入到我的应用程序中,但失败了。如果有人可以提供一些见解,我将不胜感激。 original_id 变量是我要设置的。这是 mongo 文档的链接 - https://docs.mongodb.com/manual/reference/database-references/#document-references,代码如下。任何帮助/见解都会很棒。

Template.postNewJob.events({
       'submit form': function(event) {
           event.preventDefault();
           original_id = ObjectId();
           var position = $('[name=position]').val();
           var jobDescription = $('[name=jobDescription]').val();
           var createdAt = new Date();
           var createdBy = Meteor.userId();
           postedJobs.insert({
               _id: original_id,
               position: position,
               jobDescription: jobDescription,
               createdAt: createdAt,
               createdBy: createdBy
           });
           Router.go('dashboard');
       }
    });

【问题讨论】:

  • “我做不到”是什么意思?如果您得到任何错误,请添加错误或解释您得到的结果是什么。
  • @AminJ - “我做不到”意味着如果我声明了 original_id = ObjectId(); - 它不会使用新的对象 ID 设置变量。此外,我得到的错误是“未捕获的 ReferenceError:ObjectId 未定义” - 谢谢。

标签: javascript mongodb meteor


【解决方案1】:

您可能需要使用Meteor.Collection.ObjectID() 而不是ObjectId()

有关更多详细信息,请参阅Meteor.Collection.ObjectID() vs MongoDB ObjectId()

【讨论】:

    【解决方案2】:
    > meteor shell
    Welcome to the server-side interactive shell!
    
    Tab completion is enabled for global variables.
    
    Type .reload to restart the server and the shell.
    Type .exit to disconnect from the server and leave the shell.
    Type .help for additional help.
    
    > Coll = new Mongo.Collection('coll')
    

    默认插入,Meteor会生成_id

    > Coll.insert({str: "blah"})  
    'JTeBKdTErXWQyedMN'
    

    插入传递的 ObjectID 对象作为 _id

    > Coll.insert({_id: new Meteor.Collection.ObjectID(), str: "blah"}) 
    { [String: '8dbfd702d76d6152685e2f66'] _str: '8dbfd702d76d6152685e2f66' }
    

    使用用户构造的字符串作为_id插入

    > Coll.insert({_id: "1234", str: "blah"})
    '1234'
    

    当然,如果您创建自己的 _id 值,您有责任确保集合中不存在 _id,否则您的插入将被拒绝:

    > Coll.insert({_id: "1234", str: "blah"})
    WriteError({"code":11000,"index":0,"errmsg":"E11000 duplicate key error index: meteor.coll.$_id_ dup key: { : \"1234\" }","op":{"_id":"1234","str":"blah"}})
    ... more stack trace follows
    

    然后你的收藏看起来像:

    > Coll.find({}).fetch()
    [ { _id: 'JTeBKdTErXWQyedMN', str: 'blah' },
      { _id: { [String: '8dbfd702d76d6152685e2f66'] _str: '8dbfd702d76d6152685e2f66' },
        str: 'blah' },
      { _id: '1234', str: 'blah' } ]
    
    > Coll.findOne('JTeBKdTErXWQyedMN')
    { _id: 'JTeBKdTErXWQyedMN', str: 'blah' }
    
    > Coll.findOne('1234')
    { _id: '1234', str: 'blah' }
    
    > Coll.findOne(new Meteor.Collection.ObjectID('8dbfd702d76d6152685e2f66'))
    { _id: { [String: '8dbfd702d76d6152685e2f66'] _str: 8dbfd702d76d6152685e2f66' }, str: 'blah' }
    

    【讨论】:

      【解决方案3】:

      我能够弄清楚。我需要通过以下方式设置它: var original_id = new Meteor.Collection.ObjectID().valueOf();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多