首页 > 解决方案 > 如何通过传递条件的 JSON 对象使用 Vogels 扫描或查询 Dynamodb 表?

问题描述

我正在尝试实现一个自定义的sails-dynamodb 适配器,类似于这个但与新的 Sails 版本 v1.0 兼容。

我被困在实现 find() 函数中,尝试使用传递的条件映射(query.criteria.where参数,使用 Vogels 库构建对 Dynamodb 数据库的动态查询。

如果我尝试手动构建查询,它可以工作:

model.scan().where('email').equals('xyz@abc.com').exec((err, result) => {
  if (err) {
    sails.log.error(err);
  } else {
    sails.log.info(result);
  }
});

但我想要实现的是类似于这样的东西:

model.scan({email: 'xyz@abc.com'}).exec((err, result) => {
  if (err) {
    sails.log.error(err);
  } else {
    sails.log.info(result);
  }
});

帆版 v1.0.2
Vogels 版 v2.2.0

标签: node.jsamazon-dynamodbsails.jsadaptervogels

解决方案


这是针对此问题的解决方法,我将逐个迭代查询的 where 条件,并将它们附加到扫描仪对象。

var _ = require('@sailshq/lodash');

let scanner = model.scan();

// Build query conditions
_.forOwn(sq3.criteria.where, (value, key) => {
  scanner.where(key).equals(value);
});

scanner.exec((err, result) => {
  if (err) {
    sails.log.error(err);
  } else {
    sails.log.info(result);
  }
});

推荐阅读