limitToLast:1个查询返回所有内容

时间:2016-11-30 08:06:40

标签: angular angularfire2

我正在使用AngularFire2而且无法将查询部分删除。 " limitToLast:1"正在返回所有内容,而不仅仅是我最近的条目。我需要一种方法来顺序编号我的工作,我正在尝试获取最新的jobID(4)所以我可以添加+ 1并使下一个工作5。

job: FirebaseObjectObservable<any>;
test: any;

constructor(af: AngularFire) {
    this.job = af.database.object('/jobs/', {
        query:{ limitToLast: 1 }
    });
};

createNewJob(){
    this.job.subscribe(snap => {
        this.test = snap;
    });
}

我没有输出单个最近的条目,而是获得了所有内容:

[ null, 
        { "customer": "Heather D", "description": "Work needs to be done" },
        { "customer": "Quick G", "description": "Unclog toilet" },
        { "customer": "Justin S", "description": "Do everything for everyone" }
        { "customer": "Jeff F", "description": "Ikea furniture" }
]

HTML

<button (click)="createNewJob()"> Create </button>
{{ test |  json }}

这是我的结构

ROOT
    jobs
        1
            customer: "Heather D"
            description: "Work needs to be done"
        2
            customer: "Quick G"
            description: "Unclog toilet"
        3
            customer: "Justin S"
            description: "Do everything for everyone"
        4
            customer: "Jeff F"
            description: "Ikea furniture"

更新1:

仍有同样的问题,但我觉得这是朝着正确方向迈出的一步。如果我错了,请纠正我。我现在给我的工作一个独特的ID,这对我来说似乎是多余的,但新结构看起来像这样:

ROOT
    jobs
        1
            customer: "Heather D"
            description: "Work needs to be done"
            id: 1
        2
            customer: "Quick G"
            description: "Unclog toilet"
            id: 2
        3
            customer: "Justin S"
            description: "Do everything for everyone"
            id: 3
        4
            customer: "Jeff F"
            description: "Ikea furniture"
            id: 4

然后我改变了我的疑问:

query:{ orderByChild: 'id', limitToLast: 1 }

同样的结果,仍然不仅限于一项工作。

2 个答案:

答案 0 :(得分:0)

为什么不按作业ID的降序对记录进行排序并将其限制为第一个?这将为您提供最后一条记录

答案 1 :(得分:0)

问题是您使用的是object而不是list。使用query时,将忽略object选项。也就是说,你应该使用这样的东西:

job: FirebaseListObservable<any>;
test: any;

constructor(af: AngularFire) {
    this.job = af.database.list('/jobs/', {
        query:{ limitToLast: 1 }
    });
};

FirebaseListObservable应该发出一个包含最后一个作业的数组。

但是,使用FirebaseListObservable实例的push方法更安全,而不是阅读然后递增上一个作业ID。另请参阅Saving Lists of Data

  

使用数据列表时push()可确保按时间顺序排列。您可能很想使用事务来生成自己的密钥,但推送是一个更好的选择。交易更慢,更复杂。他们需要一次或多次往返服务器。客户端上push()生成的密钥在脱机时工作,并针对性能进行了优化。