如何在不再次调用 db.collection 的情况下获取文档和编辑数据?

Posted

技术标签:

【中文标题】如何在不再次调用 db.collection 的情况下获取文档和编辑数据?【英文标题】:How to get a document and edit data without calling db.collection again? 【发布时间】:2019-01-12 13:36:09 【问题描述】:

我想获取一个字段的值,然后在它满足条件时进行更新。我想了解哪种方法最好。比如我设置了这个文档(取自here):

db.collection('cities')
  .doc('LA')
  .set(
    name: 'Los Angeles',
    state: 'CA',
    country: 'USA',
    numberOfRestaurant: 100
   );

我想将numberOfRestaurant 的值减1。假设这是在一个函数内部。

db.collection('cities')
  .doc('LA')
  .get()
  .then(function(doc) 
    var numberOfRestaurant = doc.get('numberOfRestaurant');
    if (numberOfRestaurant > 0)
      db.collection('cities')
        .doc('LA')
        .update( numberOfRestaurant: numberOfRestaurant - 1 );
    else 
      alert("Can't set negative number");
   );  

这样我调用了 db.collection 2 次。是否可以使用querySnapshot 对象来更新值而无需再次调用 db.collection。像这样的东西(我知道这种方式会出错):

db.collection('cities')
  .doc('LA')
  .get()
  .then(function(doc) 
    var numberOfRestaurant = doc.get('numberOfRestaurant');
      if (numberOfRestaurant > 0) 
         doc.update( numberOfRestaurant: numberOfRestaurant - 1 );
      else 
        alert("Can't set negative number");
   );

从Api Reference .get() 返回DocumentSnapshot。 谢谢

【问题讨论】:

【参考方案1】:

我解决了。我必须使用返回 DocumentReference 的 .ref,它引用 Firestore 数据库中的文档位置。

db.collection('cities')
  .doc('LA')
  .get()
  .then(function(doc) 
    var numberOfRestaurant = doc.get('numberOfRestaurant');
      if (numberOfRestaurant > 0) 
         doc.ref.update( numberOfRestaurant: numberOfRestaurant - 1 );
      else 
        alert("Can't set negative number");
   );

【讨论】:

以上是关于如何在不再次调用 db.collection 的情况下获取文档和编辑数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mongo Server 4.0 上的 C# 驱动程序 2.7.0 中执行 db.collection.explain()?

mongodb常见问题:索引

如何在不再次运行配置脚本/cmake 的情况下修改安装路径

mongodb ? db.collection.find() ???????

如何获取集合中的文档数量? [复制]

nodejs中如何同步连接mongodb