如何将快照限制为1个文档?

时间:2019-05-02 21:25:09

标签: javascript firebase google-cloud-firestore

我设置了实时侦听器,我已对数据进行了排序,但我只想检索最新的数据值。

我尝试添加.limit(1),但是它不起作用

const callSheet = document.querySelector('#call-sheet');
const form = document.querySelector('#add-call-form');

// create element and render calls
function renderCall(doc){
    // tags
    // unique firestore document id
    let li = document.createElement('li');
    let van = document.createElement('span');
    let time = document.createElement('span');
    let ete1 = document.createElement('span');
    let ete2 = document.createElement('span');

    if (doc.data().van == 3) {
        // set document id
        li.setAttribute('data-id', doc.id);

        // set other data fields
        van.innerHTML = "Van " + doc.data().van + '<br />'
        time.innerHTML = "Last dispatched at " + doc.data().time + '<br />';
        ete1.textContent = "ETE: " + doc.data().ete1 + " - " + doc.data().ete2 + " minutes";

        li.appendChild(van);
        li.appendChild(time);
        li.appendChild(ete1);

        callSheet.appendChild(li);
    }
}

// retrieve the Call Information collection
// snapshot is what you get back from the method call 
// (a representation of the different data in the collection)
// real-time listener:
db.collection('Call Information').orderBy("time", "desc").limit(1).onSnapshot(snapshot => {
    let changes = snapshot.docChanges();
    changes.forEach(change => {
        if(change.type == 'added'){
            renderCall(change.doc)
        } else if (change.type == 'removed'){
            let li = callSheet.querySelector('[data-id=' + change.doc.id + ']');
            callSheet.removeChild(li);
        }
    })
})

我正在尝试为每个货车获取最新的1个文档,但是即使数据库中有每个货车的文档,当我将if (doc.data().van == 3)更改为任何其他值(例如1或2)时,显示数据。 如果我删除了orderBylimit,则每个货车的所有数据值都正常显示。

1 个答案:

答案 0 :(得分:0)

您是说limit(1)

db.collection('Call Information')
  .orderBy("time", "desc")
  .limit(1)
  .onSnapshot(snapshot => {

请参见Firestore documentation on ordering and limiting data