我正在尝试在Firestore集合上按模式执行过滤器。例如,在我的Firestore数据库中,我有一个名为的品牌adidas。用户将具有搜索输入,其中键入“ adi”,“ adid”,“ adida”或“ adidas”将返回adidas文档。我指出了几种解决方案:
1.获取所有文档并执行前端过滤器
var brands = db.collection("brands");
filteredBrands = brands.filter((br) => br.name.includes("pattern"));
Run Code Online (Sandbox Code Playgroud)
由于Firestore的价格,该解决方案显然不是一个选择。此外,如果文档数量很多,执行请求可能会很长。
2.使用Elasticsearch或Algolia
这可能很有趣。但是,我认为将这些解决方案的支持仅用于模式搜索会有些过头,而且这很快就会变得昂贵。
3. searchName创建对象时的自定义字段
因此,我有了以下解决方案:在创建文档时,创建一个包含一系列可能的搜索模式的字段:
{
...
"name":"adidas",
"searchNames":[
"adi",
"adida",
"adidas"
],
...
}
Run Code Online (Sandbox Code Playgroud)
这样就可以使用来访问文档:
filteredBrands = db.collection("brands").where("searchNames", "array-contains", "pattern");
Run Code Online (Sandbox Code Playgroud)
所以我有几个问题:
在RecyclerView使用Android的情况下,从现有Firestore数据库显示数据的最佳方法是什么?
这不作为答案中的完整解释,所以我添加了这个Q&A风格,以便可以在评论中链接.
java android firebase android-recyclerview google-cloud-firestore
我将应用程序发布的想法存储在Firestore中。数据像这个Ideas / {documentID} / IdeaObject一样存储在Firestore中。问题是,当我检索数据时,它没有按发布时间排序。检索到的构想是根据Firestore自动创建的documentID的ID来确定的。我在模型类中使用了ServerTimestamp,并且在检索它时,我在orderByFirestore引用中使用了该方法,但仍然没有使用。
Idea.java
public class Idea {
@ServerTimestamp
private Date date;
private String title, idea, timeCommitment, ideaStage, postedBy, website, videoPitch;
private int views, favorites;
private ArrayList<String> lookingFor = new ArrayList<>();
private ArrayList<String> tags = new ArrayList<>();
private String userID;
private String timeStamp;
public Idea() {
}
public Idea(String title, String idea, String timeCommitment, String ideaStage, String postedBy, String website, String videoPitch, int views, int favorites, ArrayList<String> lookingFor, ArrayList<String> tags, String userID, …Run Code Online (Sandbox Code Playgroud) 在Firestore 文档中有更新嵌套对象字段的代码,但没有关于如何在嵌套对象中添加新字段的代码或文档?
// Assume the document contains:
// {
// name: "Frank",
// favorites: { food: "Pizza", color: "Blue", subject: "recess" }
// age: 12
// }
//
// To update age and favorite color:
db.collection("users").document("frank")
.update(
"age", 13,
"favorites.color", "Red"
);
Run Code Online (Sandbox Code Playgroud)
正如您在这里看到的,我们正在更新favorites.colorto Red,但是我们如何code在favorites对象中添加新字段?
假设我想更新上述文档如下:
{
name: "Frank",
favorites: { food: "Pizza", color: "Blue", subject: "recess", code:32 }
age: 12
}
Run Code Online (Sandbox Code Playgroud) 我想制作一个用户集合,用户将有多个商店作为文档,每个文档都有类似的字段storeName,storeAddress和availableProducts.我的问题是如何管理availableProducts数组?我知道Firestore无法处理数组,我应该使用HashMap.我的可用产品可能包含产品名称,产品价格等字段.我是Firebase的新手,如何availableProduct在Android Studio中使用java 管理数组?
我制作了一个使用Firebase功能的聊天应用程序Real-time database。我在使用Google身份验证时遇到问题。当我从Play商店下载应用程序时,问题开始了,当我在调试模式下运行应用程序时,身份验证工作正常。当用户尝试登录时,他们会收到一条敬酒消息code:10 message:10。
我想在这里指出:我已经添加了SHA1指纹。我该如何解决?
*不确定这是否有帮助,但本教程已逐步进行
我正在从 Firebase 数据库获取一些数据,并尝试RecyclerView用它填充适配器。notifyDataSetChanged()调用适配器后,屏幕闪烁并且没有任何反应,我什至无法在 onBindViewHolder 中捕获断点。
这是我的代码:
POJO类:
public class Result2 implements Serializable {
private int score;
private String userName;
public Result2(int score, String userName) {
this.score = score;
this.userName = userName;
}
public int getScore() {
return score;
}
public String getUserName() {
return userName;
}
Run Code Online (Sandbox Code Playgroud)
}
这是我的活动布局,名为 activity_results.xml,其中包含 RecyclerView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:weightSum="2">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="USERNAME"
android:textColor="#000"
android:textSize="16sp"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="SCORE"
android:textColor="#000"
android:textSize="16sp"/> …Run Code Online (Sandbox Code Playgroud) android firebase android-recyclerview firebase-realtime-database
我想就以下场景的 Cloud Firestore 数据结构最佳实践寻求建议。
有一个预订/约会应用程序。酒店出租房间。每家酒店都有多个房间。客户可以根据特定日期的空房情况搜索所有酒店的房间。
在 Firestore 中构建可用性数据的最佳方法是什么,以便我可以创建所有酒店的所有可用房间的视图。
我想创建一个单独的集合,我将在其中放置所有引用room ID和date保留的保留。但是,似乎我无法以这种方式搜索可用插槽,因为 Firestore 无法执行“不等于”查询。
所以我想我会为每个房间创建一个数组字段,其中包含所有可用日期作为时间戳。这就产生了另一个问题。即使我可以使用“array_contains”查询,用户也不能通过这种方式检查超过一天的可用性,因为“array_contains”每个查询只能使用一次。
在这种情况下,构建数据的最有效方法是什么?
谢谢!
database-design firebase google-cloud-functions google-cloud-firestore
{
"breviario": {
"metaLiturgia": {
"fecha" : "Martes 5 de febrero del 2019",
"tiempo" : "PROPIO DE LOS SANTOS",
"semana" : "",
"mensaje": "",
"salterio": "",
"color":0,
"meta": ""
},
"santo": {
"nombre": "Santa Águeda, virgen y mártir",
"vida": "Padeció el martirio en Catania (Sicilia), probablemente en la persecución de Decio. Desde la antigüedad su culto se extendió por toda la Iglesia y su nombre fue introducido en el Canon romano."
},
"oficio": {
"himno": {
"texto": "Testigos de …Run Code Online (Sandbox Code Playgroud) 我是 Firebase 中 Cloud Firestore 的新手。在我的项目中,我创建了集合,但我需要为每个集合重命名字段名称。是否可以?任何帮助将不胜感激。