我想在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
);
}
答案 0 :(得分:1)
这可能是一个时间问题。最有可能在将实际数据插入数据库时立即创建并返回_id
,这可以解释为什么立即在find()
上执行_id
作为空数组返回。
您是否有理由从客户端进行插入而不是在服务器上进行插入并使用Meteor方法启动它?更改为此方法可能会解决您的问题。