gpt4 book ai didi

nosql - 跟踪 NOSQL db (firebase) 中的 id

转载 作者:行者123 更新时间:2023-12-04 10:04:39 25 4
gpt4 key购买 nike

我在使用 Firebase(或其他 NOSQL 数据库,我猜?)有点挣扎的一件事是,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 ,例如,我必须对我的数据进行反规范化,或者进行某种反向查找,或者通过 ldJEIF围绕而不是书对象并不断查找数据。我错过了什么吗?处理此问题的最佳实践方法是什么?

最佳答案

拿到数据就抢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);

关于nosql - 跟踪 NOSQL db (firebase) 中的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15247506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com