firebaseArray通过id限制一个结果

时间:2016-02-04 12:55:01

标签: angularjs firebase chat

请帮助我,我正在我的应用程序中开发一个消息系统,以便快递员与客户交换消息。

有一个视图显示了客户与每个差事联系的所有快递员的消息列表。并使用firebaseArray返回来自每个快递的所有消息。这就是为什么我被卡住了我想要每个快递只显示一条消息(最新的)。因此,如果客户与Courier1,Courier2,Courier3交换消息,而不是像这样在列表中显示所有消息:

courier2 - message 6
courier3 - message 5
courier2 - message 4
courier1 - message 3
courier1 - message 2
courier1 - message 1

我只需要在列表中显示来自每个快递员的最新消息。

courier2 - message 6
courier3 - message 5
courier1 - message 3

以下是firebase中消息树的示例:

"messages" : {
    "-K9cxQITQ0jE6I7aXMm_" : {
      "date_send" : 1454533620992,
      "dest" : "Alexandre",
      "dest_uid" : "c6f1c2ca-gg454-47ca-882c-ffb45c992d86",
      "picture_runner" : "img/hipster_male.png",
      "courier" : "Ludovic",
      "txt" : "Lorem ipsum dolor sit amet, consectetur adipisicing elit"
    },
    "-K9dNYddxIbWXeasvYEK" : {
      "date_send" : 1454540733073,
      "dest" : "Alexandre",
      "dest_uid" : "c6f1c2ca-gg454-47ca-882c-ffb45c992d86",
      "picture_runner" : "img/hipster_female.png",
      "courier" : "Ophélia",
      "txt" : "Hello"
    },
    "-K9dO14ASsfXn4XrTJdX" : {
      "date_send" : 1454540857713,
      "dest" : "Alexandre",
      "dest_uid" : "c6f1c2ca-gg454-47ca-882c-ffb45c992d86",
      "picture_runner" : "img/hipster_female.png",
      "courier" : "Ophélia",
      "txt" : "Hello"
    }

以下是我收到消息的方式:

var fbAuth = fbaseUrl.getAuth();
        var query = fbaseUrl.child("messages").orderByChild("dest_uid").startAt(fbAuth.uid);
        $scope.messages = $firebaseArray(query);

1 个答案:

答案 0 :(得分:1)

您会发现在NoSQL中,您经常需要向模型添加一些数据以允许您想要实现的用例。

在这种情况下,由于您希望显示客户与之互动的每个快递的最新消息,您应该存储该信息:

latest_message_per_courier_per_customer
    "Alexandre"
        "Ludovic": "-K9cxQITQ0jE6I7aXMm_"
        "Ophélia": "-K9dO14ASsfXn4XrTJdX"
    "Savad"
        "Ophélia": "other_message_id"

现在,您可以将$firebaseArray绑定到客户的消息列表中。您可以将实际消息存储在此结构中。或者你可以只存储每条消息的ID,然后加入"扩展$firebaseArray的实际内容。例如,请参阅:How to extend returned objects in the list returned by $asArray?