gpt4 book ai didi

javascript - 如何在 MeteorJS 中更新 MongoDB 集合上的子文档数组

转载 作者:行者123 更新时间:2023-12-02 14:32:48 25 4
gpt4 key购买 nike

我在更新 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
}

请注意,overallScorescore 根本不存在。

我是 Meteor 和 Mongo 的新手(也许这是显而易见的)。有谁知道我在这里做错了什么?或者我需要什么才能正确进行此更新?

最佳答案

重要的是要记住修饰符只是一个对象。以下对象文字:

{
a: 1, b: 1,
a: 2, b: 2
}

评估为:

{ a: 2, b: 2 }

因为键被分配了两次,最后一次写入获胜。

在您的代码中,相同的想法适用于 $addToSet$inc 键。要修复它,请像这样编写更新:

Ideas.update("bKXXrpYmppFBfq9Kx", {
$addToSet: {
score: { userId: someUser._id, score: 1 },
votedOnBy: someUser._id
},
$inc: {
overallScore: 1,
timesVotedOn: 1
}
});

关于javascript - 如何在 MeteorJS 中更新 MongoDB 集合上的子文档数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37692323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com