【问题标题】:How to get last inserted record in Meteor mongo?如何在 Meteor mongo 中获取最后插入的记录?
【发布时间】:2017-01-13 01:43:16
【问题描述】:

我想在 minimongo 中获取最后插入的项目。目前我正在这样做(客户端代码):

addBook()
  {
    BookCollection.insert(
      this.book , ( err , insertedBook_id )=>
      {
        this.book_saved = true;
        console.group('Output:')
        console.log(err);
        console.log( insertedBook_id );
        console.log(
          BookCollection.find({_id: insertedBook_id})
            .fetch()
        );
        console.groupEnd();
        //this.router.navigate(['/book', insertedBook_id]);
      }
    );
  }

控制台输出:

undefined
t6Lwrv4od854tE7st
[]

如您所见,当我重定向到新创建的页面时,我找不到一本书,但在 mongo shell 中我清楚地看到该记录已添加。我应该等待像BookCollection.insert(this.book).then( . . . ) 这样的事件吗?请帮帮我!)

当我回到“所有书籍页面”时,我看到了新记录并且可以点击,一切正常,没有错误。

在 /book 控制器中:

 ngOnInit()
  {
    this.sub = this.curr_route.params.subscribe(
      params=>
      {
        this.book = BookCollection.findOne( params[ '_id' ] ); // .fetch() == []

        //if(!this.book)
        //    this.router.navigate(['/books']);

        Meteor.subscribe(
          'book' , params[ '_id' ] , ()=>
          {
            this.book = BookCollection.findOne( params[ '_id' ] );
          } , true
        )

        console.groupCollapsed( 'BookDetailsCardComponent log data:' )
        console.group( 'Book:' );
        console.log( this.book );
        console.groupEnd();
        console.groupEnd();

      } , true
    );

  }

【问题讨论】:

  • 如何在 /book 组件中加载文档?这是您看到错误的地方吗?
  • 我没有看到任何错误...问题是插入后我找不到新记录...

标签: mongodb angular angular-meteor


【解决方案1】:

这可能是时间问题。 _id 很可能在将实际数据插入数据库时​​立即创建并返回,这可以解释为什么在 _id 上立即执行 find() 会以空数组的形式返回。

您是否有理由从客户端进行插入,而不是在服务器上进行插入并使用 Meteor 方法来启动它?改用这种方法可能会解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    相关资源
    最近更新 更多