我查看了数小时的代码和注释,并努力寻找任何文档来帮助我在具有Firebase的快速应用程序中对对象进行增减。
我有一张图片库,我想为图像添加instagram风格。该用户已经使用firebase auth登录,所以我有他们的用户ID。
我只是想弄清楚方法以及需要在firebase中设置哪些规则。
任何帮助都是极好的。
我将描述如何在社交网络应用程序Impether中使用Swift
和实现此类功能Firebase
。
由于赞成和反对是类似的,因此我将仅描述赞成。
总体思路是将upvotes计数器直接存储在与该计数器相关的图像数据相对应的节点中,并使用事务写入来更新计数器值,以避免数据不一致。
例如,假设您在path处存储了一个图像数据/images/$imageId/
,其中$imageId
的id是用于标识特定图像的唯一ID-例如,它可以通过Firebase for
iOS中包含的childByAutoId函数生成。然后,与该节点上的一张照片相对应的对象看起来像:
$imageId: {
'url': 'http://static.example.com/images/$imageId.jpg',
'caption': 'Some caption',
'author_username': 'foobarbaz'
}
我们想要做的是向该节点添加一个upvote计数器,因此它变为:
$imageId: {
'url': 'http://static.example.com/images/$imageId.jpg',
'caption': 'Some caption',
'author_username': 'foobarbaz',
'upvotes': 12,
}
当您创建新图像时(可能是用户上传图像时),您可能要0
根据您要实现的目标使用或其他常数初始化upvote计数器值。
在更新特定的upuptes计数器时,您要使用事务以避免其值不一致(当多个客户端想要同时更新一个计数器时,可能会发生这种情况)。
幸运的是,处理事务中写道Firebase
,并Swift
是超级简单:
func upvote(imageId: String,
success successBlock: (Int) -> Void,
error errorBlock: () -> Void) {
let ref = Firebase(url: "https://YOUR-FIREBASE-URL.firebaseio.com/images")
.childByAppendingPath(imageId)
.childByAppendingPath("upvotes")
ref.runTransactionBlock({
(currentData: FMutableData!) in
//value of the counter before an update
var value = currentData.value as? Int
//checking for nil data is very important when using
//transactional writes
if value == nil {
value = 0
}
//actual update
currentData.value = value! + 1
return FTransactionResult.successWithValue(currentData)
}, andCompletionBlock: {
error, commited, snap in
//if the transaction was commited, i.e. the data
//under snap variable has the value of the counter after
//updates are done
if commited {
let upvotes = snap.value as! Int
//call success callback function if you want
successBlock(upvotes)
} else {
//call error callback function if you want
errorBlock()
}
})
}
上面的片段实际上几乎就是我们在生产中使用的代码。希望对您有所帮助:)
当我使用documentId作为字段路径从Firebase Firestore查询数据时,在Web页面(javascript)和Firebase函数(node.js)中运行脚本时,我会得到不同的行为。 给我一个错误: 错误:{错误:__name__上的筛选器必须是clientreadablestream._emitstatusIfdone(/user_code/node_modules/fireb
问题内容: 基本上,我有一个名为的结构,主题包含,以及一个标志(有关说明,请参见下面的屏幕截图)。 在应用程序中,我想过滤数据,仅显示具有的主题。 这就是我想要做的: 但这是行不通的。我应该如何处理?在此先感谢您的帮助。 问题答案: 您那里有一些小错误。总体来说还算不错,但是结合起来它们将永远无法正常工作: 调用任何方法都将返回一个新对象 您需要先过滤其价值 您需要遍历结果 结合这些: 我们会定期
问题内容: 我想知道如何创建 Firebase匹配Regsexex查询 并使用 shouldChangeTextInRange 列出当前结果 。 我之前在Parse中做到了,它用于在Parse Cloud中搜索用户名或用户全名。如果有人阐明了我在Firebase中执行此操作的方法,那将是很棒的。 更新1: 我不能使用相同的父名称来完成它,snap.value并没有给我响应,甚至没有编译。因此,我尝
问题内容: 我需要检测Java中的操作系统名称和版本。我可以做到的 但是问题在于这是不可靠的。有时它返回错误的信息,并且我无法检测到所有操作系统,除了最流行的Windows,MacOS,Linux等,在64位操作系统的情况下,甚至会提供错误的信息。我需要检测具有任何规格的任何操作系统。我无法为此找到合适的解决方案。 也许我可以用JavaScript做到这一点?如果在Java中是不可能的,请告诉我如
jQuery Upvote 可以创建一个投票部件,就像 Stack Exchange 网站用的一样。
问题内容: 我将Ebean与Play 2 Framework结合使用,并得到了两种模型:用户模型和书本模型。用户模型与书籍模型以一对多关系连接。因此,每个用户可以拥有很多书,甚至根本没有书。书籍模型本身也具有属性。现在,我想在用户模型中创建一个查询,该查询仅返回具有某些属性书的用户。例如:一个属性可能是条件,例如new或used。现在,给我所有拥有新状态书籍的用户。是否可以使用Ebean方法创建这