请帮助我,我正在我的应用程序中开发一个消息系统,以便快递员与客户交换消息。
有一个视图显示了客户与每个差事联系的所有快递员的消息列表。并使用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);
答案 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?