我正在为我的产品制作搜索功能。当用户搜索产品时,他们必须在最后一个库存注册日期的一个或多个存储位置找到它。
对于每个存储地点,将存储一个或多个存储有不同产品的库存。
到目前为止,我已经这样了,我的代码工作正常。它显示了最新的库存。但是,如果我为同一个存储位置创建了多个库存,我只希望显示每个存储位置的最新日期。
以下是截至目前的截图:
我只想显示 24/12/2015存储1 和 22/12/2015存储测试。因为我不需要显示较旧的存储库存。
以下是我的代码。
controllers.js:
.controller('InventoryCtrl', function($scope, $firebaseObject, $filter, Category, Inventory) {
$scope.categories = Category;
$scope.searchInventory = function(category){
var word = category.Category;
var ref = new Firebase('https://vivid-heat-2430.firebaseio.com/');
var invenRef = ref.child('Inventories');
var arrInv = [];
invenRef.orderByChild("Date").on("child_added", function(snapshot){
var data = snapshot.val();
var store = data.Inventory;
var prod = data.Products;
var test = Object.keys(prod);
for( var i = 0; i < test.length; i++){
if (test[i] == word) {
console.log("Storage place: " + data.Inventory + " Datum inventaris: " + data.Date);
var convertDate = $filter('date')(data.Date, 'dd-MM-yyyy');
arrInv.push(convertDate + " " + data.Inventory);
console.log(arrInv);
};
};
$scope.show = arrInv;
$scope.$digest();
});
};
})
的index.html:
<ion-list>
<ion-radio ng-repeat="category in categories" class="item-accordion" ng-model="checked.check" value="{{category.Category}}" ng-click="searchInventory(category)">
<p>{{category.Category}}</p>
</ion-radio>
<br>
</ion-list>
<div>
<ion-list>
<ion-item ng-model="item" ng-repeat="item in show.slice().reverse() track by $index">
<span ng-bind="item"> {{item}}
</span>
</ion-item>
</ion-list>
</div>
有人可以帮助我并告诉我如何实现这一目标吗?
提前感谢您帮助我!
答案 0 :(得分:0)
在SQL数据库中,这可以通过group by
子句来完成。但Firebase中不存在这种情况。在NoSQL数据库中,您必须对数据建模以适合您希望使用它的方式。我建议阅读有关NoSQL数据建模的更多信息,例如this article。
在这种情况下,您需要显示最近更新的库存。因此,您应该根据(最近的)更新时间戳对库存进行建模:
lastUpdatePerInventory
Storage_1: 1451080004970
Storage_Test: 1450993624134
此数据结构另外到您已为其他用例存储的所有数据。应用程序可以保持所有数据结构同步。因此,如果您将产品添加到库存中,您还应该更新该库存的``。
function addProductToInventory(product, inventoryName) {
ref.child('products')
.push(...); // whatever you do to store a product in an inventory
ref.child("lastUpdatePerInventory")
.child(inventoryName)
.set(Firebase.ServerValue.TIMESTAMP);
}
高级用法:如果您担心该功能应该是交易,您可以编写它以使用Firebase的多地点update()
功能:
function addProductToInventory(product, inventoryName) {
var updates = {};
var newId = ref.push().key(); // determine a new unique key
updates['products/'+key] = ...// whatever store for a product in an inventory
updates["lastUpdatePerInventory/inventoryName"] = Firebase.ServerValue.TIMESTAMP;
ref.update(updates);
}