0

我对 mongodb 很陌生。我基本上是在尝试从集合中检索数据并放到屏幕上。它是一个 angular2-meteor 应用程序。我可以在 mongo shell 中插入和检索数据。但是当我尝试遍历值书签时,我得到了错误:

找不到“object”类型的不同支持对象“[object Object]”。NgFor 仅支持绑定到 Iterables,例如 Arrays。

当我控制台记录 find() 方法返回的数据时,它会返回整个 mongodb 对象集合,并且 boomarks 集合深埋在对象内部。

如何获取使用 .find() 方法返回的返回的书签变量中的所有对象的数组?

我的组件如下:

import { Component } from '@angular/core';
import template from './bookmarks.component.html';
import { Bookmarks } from '../../../../collections/bookmarks';
import { Mongo } from 'meteor/mongo';
@Component({
  selector: 'bookmarks-list',
  template
})
export class bookmarksListComponent {
  bookmarks: Mongo.Cursor<Object>;
  constructor() {
    this.bookmarks=Bookmarks.find();
    console.log(this.bookmarks);
  }
}

这是html模板:

<tbody>
    <tr *ngFor="let bookmark of bookmarks">
        <td>{{bookmark.title}}</td>
        <td>{{bookmark.url}}</td>
        <td>{{bookmark.category}}</td>
        <td><button class="btn btn-danger">Delete</button></td>
    </tr>
</tbody>

错误快照

4

2 回答 2

2

使用 rxjs 找到解决方案:不要使用流星/mongo,而是使用 rxjs 并订阅 mongo 的 collections.find() 方法。此外,在更新 mongo 集合时,使用 MongoObservable.collections 整个代码:

书签.component.ts:

import "reflect-metadata";
import { Component, OnInit, NgZone } from '@angular/core';
import template from './bookmarks.component.html';
import { Bookmarks, bookmark } from '../../../../collections/bookmarks';
import { Observable } from 'rxjs';
@Component({
  selector: 'bookmarks-list',
  template
})
export class bookmarksListComponent implements OnInit{
  private bookmarks: bookmark[];
  constructor(private zone: NgZone) {
  }
  ngOnInit(){
    Bookmarks.find({}).zone().subscribe({
      next: bookmarks => {
        console.log("Got Bookmarks: ", bookmarks);
        this.bookmarks=bookmarks;
      }
    });
  }
}

Bookmarks.ts(收藏)

import { MongoObservable } from 'meteor-rxjs';
export interface bookmark {
    title: string;
    url: string;
    category: string;
}
export const Bookmarks= new MongoObservable.Collection<bookmark>('bookmarks');

Angular2-rxjs-meteor:从此 repo 获取帮助https://github.com/ijager/meteor-rxjs-angular2.0.0-example.git

于 2016-09-29T05:16:33.847 回答
0

如果你真的想用 Mongo.Cursor 来做,那么在你的代码中

constructor() {
this.bookmarks=Bookmarks.find();
console.log(this.bookmarks);
  }

代替this.bookmarks=Bookmarks.find();

this.bookmarks=Bookmarks.find({}).fetch();

于 2016-10-24T13:39:01.387 回答