我试图做一个"纯键查询"与谷歌的数据存储API对Node.js的,如文档中的例子在这里.
我保存了许多这样的记录后这样做:
datastore.save(
records.map(
(record) => {
return {
key: datastore.key([kind, record.id]),
data: record,
};
}
)
Run Code Online (Sandbox Code Playgroud)
常量kind是一个字符串.每个record都有一个有效的唯一id属性(一个数字),如此处所示,它也应该作为数据存储区密钥标识符.
记录存储正确.我可以毫无问题地检索它们
datastore.runQuery(datastore.createQuery(kind))
.then( (results) => {
// whatever...
}
Run Code Online (Sandbox Code Playgroud)
正确返回所有已保存的记录.
但是,当我这样做"仅限密钥的查询"时(并在文档中举例说明):
const query = datastore.createQuery(kind)
.select('__key__');
datastore.runQuery(query)
.then( (results) => {
// whatever...
}
Run Code Online (Sandbox Code Playgroud)
我的results[0]返回值只是一个空对象数组,如下所示:
results[0]: [ {}, {}, {}, {}, {}, ..., {}]
Run Code Online (Sandbox Code Playgroud)
此处返回的空对象数是给定类型的正确记录数.但问题是它们是空物.我希望在这里获得每条记录的数据存储区密钥.
另一方面,如果我在"正常"属性上执行"正常"投影查询(例如"id" - 应该与数据存储区键相同,据我所知,在定义了密钥之后datastore.key[kind, record.id]) ,我正确检索投影的"id"属性,因此:
const query = datastore.createQuery(kind)
.select('id');
datastore.runQuery(query)
.then( (results) …Run Code Online (Sandbox Code Playgroud) Google Cloud Firestore即将取代旧版Google Cloud Datastore。然后,可以选择在“本机模式”或“数据存储模式”下使用Cloud Firestore。前者允许通过常规的Firestore SDK访问Firestore,而后者则允许使用旧的Cloud Datastore SDK(不具有Web / Mobile API)。
我还不熟悉Firestore。我的问题是:除了将内容移植到新的API之外,实际上还有任何在“本机模式”下使用Firestore无法完成的事情,这可以通过旧的Cloud Datastore(或其替代:在“数据存储模式”下使用Firestore完成) )?还是使用“数据存储模式”的其他优势(例如成本)?
如果没有,那么除了使用旧的Cloud Datastore兼容旧代码外,似乎在“数据存储模式”下使用Firestore实际上没有任何优势。
在我的假设是公司的FireStore“数据存储模式”绝对没有好处除了能够使用传统的数据存储API(在成本我说得对不对不能够使用新的和公司的FireStore API,包括移动和网络可能更丰富的功能蜜蜂)?
我有这样的情况:在一个名为“ProductForm”的组件中,我有一个方法“addToCart”,它将一些产品添加到在线商店的购物车中。这是通过按钮单击事件调用的。
现在我添加了一个新的子组件“GiftUpsell”,它本质上只是一个附加的“添加到购物车”按钮。但它应该另外添加另一个产品,作为参数传递给handleAddToCart。
因此,我修改了 ProductForm 中的 handleAddToCart 方法以接受可选参数,如下所示,并通过子组件“GiftUpsell”的事件传递此参数:
产品表单.vue
<template>
<btn @click.native="handleAddToCart">Add to Cart</btn>
<gift-upsell @upsellAddToCart="handleAddToCart" />
</template>
<script>
import GiftUpsell from '~/components/GiftUpsell'
export default {
components: { GiftUpsell },
methods: {
handleAddToCart(upsellLineItem = null) {
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
GiftUpsell.vue
<template>
<btn @click.native="upsellAddToCart">Add to cart with upsell</btn>
</template>
<script>
export default {
methods: {
createUpsellLineItem() {
// whatever
return some object;
},
upsellAddToCart() {
const lineItem = createUpsellLineItem();
this.$emit('upsell-add-to-cart', lineItem);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是:当我使用新的追加销售“添加到购物车”按钮时,它工作正常。该lineItem参数作为唯一参数传递handleAddToCart …