在NOSQL db(firebase)中跟踪ID

我正在与Firebase(或其他NOSQL dbs,我猜?)进行一些努力的事实是,id不是“行”主体的一部分.所以,如果我的收藏如下:
Books
  |----ldJEIF
          |----Title: "A Tale of Two Cities"
          |----Author: "Charles Dickens"
          |----Body: "It was the best of times..."     
  |----2difie
          |----Title: "Moby Dick"
          |----Author: "Herman Melville"
          |----Body: "Call me Ishmael..."

如果我检索BooksList,然后选择myBook = books [ldJEIF]来处理数据,myBook就不知道它来自哪个列表.例如,如果我以后想要将它添加到UserLibrary,我必须对数据进行去规范化,或者进行某种反向查找,或者传递ldJEIFaround而不是book对象并不断查找数据.我错过了什么吗?处理这个问题的最佳做法是什么?

获取数据时获取ID

至少对于Firebase,当您检索记录时,您还会获得ID.因此,一个简单的解决方案是存储ID.如果您没有方便的地方,可以将其粘贴到数据中:

firebaseRef.on('child_added',function(snapshot) {
   var data = snapshot.val();
   data.id = snapshot.name(); // add the key as an id
});

当然,如果你这样做,你必须记住在将数据发送回服务器之前将其取回.

使用快照

再次特定于Firebase,您可以保留对快照的引用并传递它而不仅仅是数据.我个人并不喜欢这种做法,但我无法确定它违反了什么整洁的内部原则.

但是,在某些情况下,它非常方便,因为您可以随时引用数据,ID和Firebase对象;相当方便.

将ID放入数据中

NoSQL的一个常见做法是将id放入数据中 – 除了一点额外的存储空间之外没有任何问题 – 在大多数用例中都是微不足道的.然后,当您获取记录时,ID已存在于数据中,并且一切都很漂亮.

对于Firebase,您可以生成id并在创建期间将其放入数据中.以下聪明之处来自他们的一个开源示例:

var data = {...};
var id = firebaseRef.push().name(); // generate a unique id based on timestamp
data.id = id; // put id into the data
firebaseRef.child(id).set(data);

相关文章

校园网上订餐系统系统主要功能模块包括公告内容(公告栏、轮...
从今天开始,正式进入项目阶段。本次的项目是跟着黑马的瑞吉...
在可预见的将来,IT不会萎缩,只会越发展越庞大,最终会渗透...
vulntarget-b靶场最详细通关记录。
MongoDB是一个开源、高性能、支持海量数据存储的。
【NoSQL数据库技术与应用】课本代码、课后答案(持续更新)