- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Node 10、firebase 8.0、firebase-admin 9.3.0。我已经包含了我的测试代码和客户端 js 版本的副本。
数据
Document ID | name | is_visible
----------- | ---- | ----------
1 | a | true
2 | b | true
3 | c | true
4 | d | true
5 | e | true
6 | f | true
7 | g | true
8 | h | true
9 | i | true
代码
var admin = require("firebase-admin");
const firebaseConfig = {xxx}
admin.initializeApp({
credential: admin.credential.cert(firebaseConfig)
});
const getDocs = async () =>{
try {
const cursor = await admin.firestore().collection('ordering').doc('5').get();
const beforeDocs = await admin.firestore().collection('ordering')
.orderBy("name", "desc")
.endAt(cursor)
.limit(2)
.get()
beforeDocs.forEach((doc)=> {
console.log("Doc ID - ",doc.id, ", Name -", doc.get('name'));
})
const afterDocs = await admin.firestore().collection('ordering')
.orderBy("name", "desc")
.startAt(cursor)
.limit(2)
.get()
afterDocs.forEach((doc)=> {
console.log("Doc ID - ",doc.id, ", Name -", doc.get('name'));
})
}
catch (error) {
console.error(error);
}
}
getDocs();
使用
node getDocs.js
运行
Doc ID - 6 , Name - f
Doc ID - 5 , Name - e
Doc ID - 5 , Name - e
Doc ID - 4 , Name - d
实际结果
Doc ID - 9 , Name - i
Doc ID - 8 , Name - h
Doc ID - 5 , Name - e
Doc ID - 4 , Name - d
我对 endAt 的临时解决方法是将顺序反转为“asc”使用 startAt 然后在 QuerySnapshot 中反转 forEach 之前的 docs 数组。
<script src="https://www.gstatic.com/firebasejs/8.0.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.0.0/firebase-firestore.js"></script>
<body>
<div id="output">Check the console!</div>
</body>
<script>
var firebaseConfig = {
apiKey: "AIzaSyAxLEo7LfABdATToJTMQGae3Vgum_CAlQg",
authDomain: "bmtestbase.firebaseapp.com",
databaseURL: "https://bmtestbase.firebaseio.com",
projectId: "bmtestbase",
storageBucket: "bmtestbase.appspot.com",
messagingSenderId: "326028950684",
appId: "1:326028950684:web:74b55887466c63b4a9c159"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
const db = firebase.firestore()
// Setting the Focus point using a Snapshot
db.collection('ordering').get()
.then (docs => {
docs.forEach(doc => {
console.log("MYCODE_allDocs: DocID ", doc.id, ", Name ", doc.get('name'))
})
})
db.collection('ordering').doc('5').get()
.then( focusSnapshot => {
db.collection("ordering")
.orderBy("name", "asc")
.endAt(focusSnapshot)
.limit(2)
.get()
.then(docs => {
console.log("MYCODE_endAt_expected:","DocID 4, Name d")
console.log("MYCODE_endAt_expected:","DocID 5, Name e")
docs.forEach(doc => {
console.log("MYCODE_endAt:","DocID ", doc.id, ", Name ", doc.get('name'))
});
})
db.collection("ordering")
.orderBy("name", "asc")
.startAt(focusSnapshot)
.limit(2)
.get()
.then(docs => {
console.log("MYCODE_startAt_expected:","DocID 5, Name e")
console.log("MYCODE_startAt_expected:","DocID 6, Name f")
docs.forEach(doc => {
console.log("MYCODE_startAt:","DocID ", doc.id, ", Name ", doc.get('name'))
});
})
})
</script>
最佳答案
根据firebase支持,您需要使用limitToLast与 endBefore和 endAt
像这样重写你的例子应该有效:
<script src="https://www.gstatic.com/firebasejs/8.0.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.0.0/firebase-firestore.js"></script>
<body>
<div id="output">Check the console!</div>
</body>
<script>
var firebaseConfig = {
apiKey: "AIzaSyAxLEo7LfABdATToJTMQGae3Vgum_CAlQg",
authDomain: "bmtestbase.firebaseapp.com",
databaseURL: "https://bmtestbase.firebaseio.com",
projectId: "bmtestbase",
storageBucket: "bmtestbase.appspot.com",
messagingSenderId: "326028950684",
appId: "1:326028950684:web:74b55887466c63b4a9c159"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
const db = firebase.firestore()
// Setting the Focus point using a Snapshot
db.collection('ordering').get()
.then (docs => {
docs.forEach(doc => {
console.log("MYCODE_allDocs: DocID ", doc.id, ", Name ", doc.get('name'))
})
})
db.collection('ordering').doc('5').get()
.then( focusSnapshot => {
db.collection("ordering")
.orderBy("name", "asc")
.endAt(focusSnapshot)
.limitToLast(2)
.get()
.then(docs => {
console.log("MYCODE_endAt_expected:","DocID 4, Name d")
console.log("MYCODE_endAt_expected:","DocID 5, Name e")
docs.forEach(doc => {
console.log("MYCODE_endAt:","DocID ", doc.id, ", Name ", doc.get('name'))
});
})
db.collection("ordering")
.orderBy("name", "asc")
.startAt(focusSnapshot)
.limit(2)
.get()
.then(docs => {
console.log("MYCODE_startAt_expected:","DocID 5, Name e")
console.log("MYCODE_startAt_expected:","DocID 6, Name f")
docs.forEach(doc => {
console.log("MYCODE_startAt:","DocID ", doc.id, ", Name ", doc.get('name'))
});
})
})
</script>
关于node.js - Firestore 查询 endBefore 和 endAt 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64666057/
当我试图通过电子邮件或电话号码查找记录时,我一直在使用下面的两个代码,有时第一个代码工作正常有时不起作用,第二个代码也一样。 下面的代码和什么时候应该使用“equalTo”或“startAt and
有没有办法将 beginAt 和 endAt 与索引一起使用而不是优先级,以便我可以用它进行客户端分页? 我将 .priority 分配给非空值以进行排序。 最佳答案 您可以使用 startAt/en
我最初使用 limitToLast(5) 从我的数据库节点加载最后 5 个项目,如下所示: var myData = []; var firstKey; var fetchInitialData(ca
我有这些字段的记录: age: 25 timestamp: 1484089199472 此记录插入者: @Exclude public Map toMap() { HashMap result
这里是非常基本的问题 我的存储日期字符串在 Firebase DB 中是这样的 23-Oct-2016 07:00:11 AM 现在我正在触发这个查询,我正在获取从那个日期开始的所有数据 Que
尝试查找具有 organizer 子节点且值小于 2 的节点。 有这样的结构 { "path": { "-KLjhOXKn0mHmGwQTHp7": {
a b c d e FirebaseRef.orderByKey().endAt('c').limitToLast(2) 将返回 b, c 我想检索除了c,所以a,b就是我想要的。 我该怎么做? 最佳
我想使用 startAt() 和 endAt() 方法,但我不完全理解它们是如何工作的。 假设我有当前的数据库 "users" : { "someUser1" : { "email
我有两个日期,即 Startdate 和 Enddate。我正在使用 DatePickerDialog。假设我的 Startdate 是 1-3-2014 那么我想限制 Enddate 到 Start
我正在使用 query#startAt 和 query#endAt 从 Firebase 检索数据 这两个 API 的问题是它们检索具有大于/小于或等于 键的节点。 无论如何我只能查询大于或小于?或者
我有以下数据结构: attendance --- 2020-02-09-PM --- 2020-02-11-PM --- 2020-02-16-AM --- 2020-02-16-PM --- 202
我将 firebase 与 GeoFire 结合使用,这很好用,但我还需要一个查询,我不确定应该如何完成。 这是我的 GeoFire/Firebase 查询: var geoFire = new Ge
我有一个联合属性,用于一次查询多个值。它看起来像这样: 这是我的查询代码: rootRef.child("leagues") .orderByChild("division_s
如何根据用户名搜索用户?我已经看过很多关于这个问题的 SO 帖子,但仍然无法实现我想做的事情。我已经尝试应用我在这些帖子中看到的内容,如下所示: DatabaseReference usersRef
我正在使用 Node 10、firebase 8.0、firebase-admin 9.3.0。我已经包含了我的测试代码和客户端 js 版本的副本。 数据 Document ID | name | i
我想用两个where条件进行查询。我开始知道直接在 firebase 中是不可能的。所以,我采用了下面的方法。将两个属性存储为一个字段并对该字段进行查询。但我没有得到正确的结果。我也收到不匹配的记录,
我正在尝试使用 startAt 和/或 endAt 过滤 firebase 数据。我的数据结构如下。 { "notes" : { "-LOs0Ikx4ydM5RatREM1" : {
我有一个 Firebase 查询,如下所示: this.db.object(`...irrelevent`).query .orderByKey().startAt(startVal).e
假设我们在 people 集合中有一个“people”集合,我们有 person 对象 public class Person{ public String personId; pub
我从这个 question 中读到了 Dan McGrath 的回答他在其中说在 Firestore 中有以下代码行的等效项: myRef.startAt(searchText).endAt(sear
我是一名优秀的程序员,十分优秀!