Вставьте и объедините определенное поле в базе данных пожарного депо - PullRequest
0 голосов
/ 31 августа 2018

В моей коллекции есть документ в этом формате

name: xyz,
email: xyz@email.com,
age: 30,
address: {
    street_no: {
        complete_address: somedata,
        pincode: somepin
    },
    city:somecity,
    state:somestate,
    landmark:nearby
}

И внутри этого документа я пытаюсь вставить и объединить complete_address с предыдущей записью. Чтобы добиться этого, я пытаюсь это

const database = firebase.firestore();
var dataRef = database.collection('collection');
var query = dataRef.doc(key+"").get().then(doc=>{
    if(!doc.exists){
        res.send("doesn't exist");
    }else{
        //few checks
        if(doc.data().accessid != accessid){
            res.send("accessid doesn't match")
        }
        //here I am trying to insert and merge with the previous data
        var form_path = 'address.street_no.complete_address';
        dataRef.doc(key+"."+form_path).set({
            another_address
        }, {merge: true});
    }
}).catch(err=>{
    console.log(err)
})

Но когда я выполняю это, он просто добавляет другой документ в коллекцию, после чего следует путь key.address.street_no.complete_address.

Что я могу сделать, чтобы только вставить и объединить с предыдущим complete_address?

Существует . вместо / в form_path, потому что получил немного идей по этой ссылке

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

У меня это работает.

Итак, я выяснил, что я пытался сделать ранее, создаст еще один документ в коллекции с данными относительно него. Поэтому я начал обрабатывать все как объект и передавал данные объекта в метод set().

const database = firebase.firestore();
var dataRef = database.collection('collection');
var query = dataRef.doc(key+"").get().then(doc=>{
    if(!doc.exists){
        res.send("doesn't exist");
    }else{
        //few checks
        if(doc.data().accessid != accessid){
            res.send("accessid doesn't match")
        }
        //here I am trying to insert and merge with the previous data
        var mergeData = {
            address : {
            }
        }
        var new_address = {
            key: "address_data"
        }
        mergeData.address[street_no] = {complete_address : address}
        if(dataRef.doc(key+"").set(mergeData, {merge: true})){
            res.send("done")
        }else{
            res.send("failed")
        }
    }
}).catch(err=>{
    console.log(err)
})
0 голосов
/ 31 августа 2018

Я полагаю, что ваша проблема находится в следующих нескольких строках, начиная с

var form_path = 'address.street_no.complete_address';

Далее, вы используете dataRef.doc(key+"."+form_path)

, что означает, что установлен только документ

/addressCollection/key.{addressCollectionId}

и addressCollectionId, являющиеся address.street_no.complete_address

Вместо этого вы хотите получить доступ к свойству в документе с помощью точечной нотации, например, так.

address: {
    street_no: {
        complete_address

Пример. * * Один тысяча двадцать-одна

someDocument.update({
    "address.street_no.complete_address": "some_data"
});

Обратите внимание, что "some_data" заменит все данные, которые хранятся в данный момент. Вы хотите сделать одно чтение и объединить данные. Например.

  const anotherAddress = { address: "123 Fake Street" };

  const document = firebase
    .firestore()
    .collection("addressCollection")
    .doc("someAddressId");

  document
    .get()
    .then(snap => {
      const data = snap.data();
      const completeAddress = data.address.street_no.complete_address };

      // We're using the spread operator here to combine the current completeAddress with anotherAddress
      return { completeAddress, ...anotherAddress };
    })
    .then(newCompleteAddress =>
      document.update({
        "address.street_no.complete_address": newCompleteAddress
      })
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...