【问题标题】:Dynamically create Meteor.js MongoDB query动态创建 Meteor.js MongoDB 查询
【发布时间】:2015-01-24 05:51:18
【问题描述】:

由于某种原因,我很难让它发挥作用。我有一个名为“cats”的 Mongo 集合,还有一个名为“rows”的集合。 'cats' 中的 cat 字段是 currentCat。然后我希望能够通过引用带有_id 的预先存在的文档来更新“行”中的文档。那里没有问题。但是对于每个currentCat,我想在“行”文档中添加一个元素,其中currentCat 作为字段,其他内容作为值(currentPer)。我想出了这个:

var cats = Cats.find({owner: Meteor.userId()}, {fields: {cat: 1, per: 1}});

cats.forEach(function(cats) { //Inserts the rest of the row
  var currentCat = cats['cat'];
  var currentPer = cats['per'];
  var currentAmount = Math.round(amount*currentPer*100)/100;

  Rows.update(
    { _id: row },
    { $push: { currentCat: currentAmount } }
  );
});

(row是我要修改的文档的id)

当然,它没有按预期工作,只是插入...{currentCat: 57} 而不是变量currentCat 的值。接下来,我尝试创建一个查询对象(如here 所述):

var query = ({ _id: row }, { $push: { currentCat: currentAmount } })

这也失败了,但这次出现了一个描述性极好的错误消息:

Error: Invalid modifier. Modifier must be an object.

任何帮助都将不胜感激,因为我已经花费了数小时和无数次谷歌搜索(尽管答案可能很明显,我只是看不到它 - 我仍在尝试在 PHP 之后习惯 Meteor) .

编辑:我希望完成的文档看起来像这样:

 { "_id" : "PshEYKebccw7eYaTo", 
   "createdAt" : ISODate("2014-11-26T00:52:51.840Z"),
   "cat1" : 312,
   "cat2" : 564,
   "owner" : "GiWCb8jXbPfzyc5ZF",
   "text" : "asdf" 
}

【问题讨论】:

  • 你能显示你期望得到的json吗?
  • @KeithNicholas 添加了一个示例。
  • 您希望 Row 文档看起来像什么?根据您的代码,我期待类似{_id: 123, currentCat: [5.25, 6.75, 1.55, 2.78]}
  • @Colllin 请看我的例子。我希望每个 cat 都有一个字段和值对。
  • 好的,所以基本上你错过了其他答案中查询对象的要点。在 Javascript 中,{ currentCat: currentAmount } 变为 { 'currentCat': 312 },因为键必须是文字键。您不能使用变量作为键名。为此,您必须按照我在下面的答案中构建对象。通过使用方括号表示法,您可以在对象上设置动态键,然后将该对象发送到查询中。 catData[currentCat] 首先将currentCat 变量解释为'cat1',然后访问该键,就像您已经完成catData['cat1'] 一样。

标签: mongodb meteor


【解决方案1】:

$push 仅用于对数组进行操作。根据您的 Row 文档示例,您实际上并不需要在这里进行数组操作。

尝试在 Row 文档中为每个新的 cat 值设置字段。

  var catData = {};
  catData[currentCat] = currentAmount;
  // As an example, catData now looks like {'cat1': 312}

  Rows.update(
    { _id: row },
    { $set: catData }
  );

【讨论】:

  • 谢谢!现在完美运行。我最终在forEach 之前声明了catData,并在之后声明了Rows.update()。另外,作为奖励,我现在对每个cat 只访问数据库一次而不是多次。
猜你喜欢
  • 2015-04-09
  • 1970-01-01
  • 2016-03-17
  • 2014-10-15
  • 2016-06-16
  • 2017-04-20
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
相关资源
最近更新 更多