小编tro*_*tze的帖子

如何在Google Cloud Datastore(Node.js)中执行"仅限密钥查询"

我试图做一个"纯键查询"与谷歌的数据存储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-app-engine node.js google-cloud-datastore

5
推荐指数
1
解决办法
966
查看次数

Firestore在“数据存储模式”下是否有任何优势“本机模式”

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,包括移动和网络可能更丰富的功能蜜蜂)?

google-cloud-datastore google-cloud-firestore

5
推荐指数
3
解决办法
1761
查看次数

Vue 事件处理程序有时会传递 $event 对象,有时则不会

我有这样的情况:在一个名为“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 …

vue.js nuxt.js

5
推荐指数
1
解决办法
1073
查看次数