如何在不再次调用 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()?