如何在Meteor mongo中获得最后插入的记录?

时间:2016-09-05 16:46:13

标签: mongodb angular angular-meteor

我想在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 controller中:

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

  }

1 个答案:

答案 0 :(得分:1)

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

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