我在Meteor中更新mongo集合时遇到问题。
也许我只是不明白$addtoset
是如何运作的。
这是我的基本文档,或多或少是在fixtures.js
我初始化项目的地方:
var someUser = Meteor.users.findOne("W9YEs84QFhZzJeB6j");
var NewIdea = Ideas.insert({
title: "This Is a Title",
body: "Blah Blah Blah Body Goes Here",
userId: someUser._id,
author: someUser.profile.name,
timestamp: new Date(now - 5 * 3600 * 1000),
score: [],
overallScore: 0,
votedOnBy: [],
timesVotedOn: 0
});
以下是我希望在更新后看起来的样子:
{
_id: "bKXXrpYmppFBfq9Kx",
title: "This Is a Title",
body: "Blah Blah Blah Body Goes Here",
userId: "W9YEs84QFhZzJeB6j",
author: "Users Name",
timestamp: ISODate("2016-06-07T20:37:05.775Z"),
score: [
{
userId: ""W9YEs84QFhZzJeB6j",
score: 1
}
],
overallScore: 1,
votedOnBy: [
"W9YEs84QFhZzJeB6j"
],
timesVotedOn: 1
}
以下是我用来更新的代码(不起作用):
Ideas.update("bKXXrpYmppFBfq9Kx", {
$addToSet: {score: {userId: someUser._id, score: 1}},
$inc: {overallScore: 1},
$addToSet: {votedOnBy: someUser._id},
$inc: {timesVotedOn: 1}
});
这是来自mongo控制台的实际文档(更新后):
{
"_id" : "bKXXrpYmppFBfq9Kx",
"title" : "This Is a Title",
"body" : "Blah Blah Blah Body Goes Here",
"userId" : "W9YEs84QFhZzJeB6j",
"author" : "Users Name",
"timestamp" : ISODate("2016-06-07T20:37:05.775Z"),
"votedOnBy" : [
"W9YEs84QFhZzJeB6j"
],
"timesVotedOn" : 1
}
请注意,overallScore
和score
根本不存在。
我是Meteor和Mongo的新手(也许这很明显)。有谁知道我在这里做错了什么?或者我需要什么才能让我更新呢?
答案 0 :(得分:2)
记住修饰符只是一个对象很重要。以下对象文字:
{
a: 1, b: 1,
a: 2, b: 2
}
评估为:
{ a: 2, b: 2 }
因为密钥被分配了两次,最后一次写入获胜。
在您的代码中,相同的想法适用于$addToSet
和$inc
键。要修复它,请像这样写下update
:
Ideas.update("bKXXrpYmppFBfq9Kx", {
$addToSet: {
score: { userId: someUser._id, score: 1 },
votedOnBy: someUser._id
},
$inc: {
overallScore: 1,
timesVotedOn: 1
}
});