gpt4 book ai didi

javascript - 如何使用Meteor和MongoDB从数组中的对象返回子文档

转载 作者:行者123 更新时间:2023-11-28 05:55:45 25 4
gpt4 key购买 nike

这是我先前在question上的stackoverflow.com的后续问题。

首先,感谢@David Weldon:我能够正确构建更新。但是,当我从数据库获取输出时,添加到score的对象将丢失。

也许这是db.ideas.find()的默认行为。我希望在执行db.ideas.find()时也会得到子文档。

我运行的代码:

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


mongo db控制台的输出:

meteor:PRIMARY> db.ideas.find()
{
"_id" : "bKXXrpYmppFBfq9Kx",
"title" : "Jump through the portal",
"body" : "The elves from Eldernland should jump through the blue portal mentioned in episode one.",
"userId" : "W9YEs84QFhZzJeB6j",
"author" : "Nate Beck",
"episodeId" : "LbDynnAHxAgM5PPXM",
"timestamp" : ISODate("2016-06-07T20:37:05.775Z"),
"votedOnBy" : [
"W9YEs84QFhZzJeB6j"
],
"timesVotedOn" : 3,
"score" : [
{

}
],
"overallScore" : 1
}


我期待看到“分数”中的内容看起来像一个空对象。

任何想法出什么事了吗?

最佳答案

!解决了!

这里的问题是我不知道软件包aldeed:collection2对我的代码做了什么。我添加了此软件包以使用OrionJS(这是github page)。而且我没有注意到这个aldeed:collection2强制对我的所有更新进行验证。我以前曾遇到过这个问题,但它给了我一个错误。过去,我能够找到错误所在。这次,任何地方都没有错误。它将更新数组,但对象为空。太混乱了我要在aldeed:collection2的项目页面上发布问题。

project documentation中:“ [aldeed:collection2是一个Meteor程序包,它允许您将模式附加到Mongo.Collection。在从客户端或服务器代码插入和更新时,将自动针对该模式进行验证。”

可以在documentation中找到用于校正的here



解:

因为我使用的是aldeed:simple-schemaaldeed:collection2,所以我需要确保将正确的“模式”附加到集合中。

像这样:

Ideas.attachSchema(new SimpleSchema({
// ... a bunch of other schema data

// I was missing this:
score: {
type: [Object],
optional: true,
label: 'Score',
},
"score.$.userId": {
type: String,
optional: true,
label: 'Score'
},
"score.$.score": {
type: String,
optional: true,
label: 'Score'
}

// ... a bunch more schema data
});




故障排除:

我是怎么知道的?

好吧,我是MongoDB的新手-所以我不愿意去控制台,只是尝试从那里进行更新。实际上,直到我与妻子交谈时,我才意识到这一点。

我尝试了所有内容,在所有内容周围添加了引号,并查看了其他人的代码。我检查了MongoDB的所有出色文档。我看了YouTube视频。我查看了其他stackoverflow.com解决方案。最终我想到,其他人的代码看起来都和我的代码完全一样,这应该可以正常工作。我什至注册了 Clarity.fm,以每分钟1美元的价格向 Sacha Greif提问。

...我开始认为我的mongo数据库无法正常工作。也许我的mongo安装被破坏了?

所以,好的,对此进行了测试...经过两天的折磨,它终于来到了我-只需在mongo控制台中尝试更新即可。

meteor:PRIMARY> db.ideas.update({_id:"DqEGjK3xSTBdpEgXa"}, {$addToSet: {score: {userId: "123456", score: 1}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
meteor:PRIMARY> db.ideas.find()
{
"_id" : "DqEGjK3xSTBdpEgXa",
"title" : "Revive Randolf With Bloodmagic",
"body" : "Bring Randolf back from the dead using witche's bloodmagic.",
"userId" : "Rz28ByKYM4Y8futFb",
"author" : "Iryna Iglehart",
"episodeId" : "iQaxyLPi5iaYtQngf",
"timestamp" : ISODate("2016-06-08T17:37:57.237Z"),
"score" : [
{
"userId" : "123456",
"score" : 1
}
],
"overallScore" : 0,
"votedOnBy" : [ ],
"timesVotedOn" : 0
}


一旦我知道mongo可以进行更新-我知道问题一定出在我的流星设置上。如果这是个问题,到现在我会在流星上发现一个问题。我搜索了Google的每个暗角,试图弄清楚这一点。

不久之后,我就想起了我之前遇到过奇怪的验证问题。除了这些验证问题之外,总是会出现错误。没有错误,并且只用空对象更新了数组,这让我陷入了循环。



我学到的是:


如果最初的流星失败,请尝试mongo控制台...
根据 @David Weldon的评论-另一种对我有帮助的良好调试技术,我很久以前就可以尝试过,它是开始一个新的流星项目并在那里测试我的代码,然后一次添加一个软件包,然后查看何时/是否有人破坏代码。该测试将指出,从根本上讲,该代码是正确的,并且由于添加了程序包,因此仅需要附加的架构。
不要盲目添加软件包。了解软件包是否/何时更改了开发流程,例如 aldeed:collection2




谢谢:

非常感谢 @Michel Floyd@David Weldon在此问题上的所有帮助。



重要链接:


我从 common mistakes撰写的 @David Weldon学到了很多东西
documentation for aldeed:collection2
documentation for aldeed:simple-schema
this meteor tutorial上搜索“查找数据”-它讨论了fetch()及其帮助。这有助于我在对这个问题进行故障排除期间。
在MongoDB中查看 documentation on about update
MongoDB $addToSet Documentation
MongoDB $push Documentation
[MongoDB Bios示例集合]( https://docs.mongodb.com/manual/reference/bios-example-collection/]-正是在查看了这样的文档之后,我才真正发现我的数据库设计没有错,应该一直有一种方法可以做到这一点(而且显然)




相关问题:

[Solved] How to Update An Array of Subdocuments on a MongoDB Collection in MeteorJS

关于javascript - 如何使用Meteor和MongoDB从数组中的对象返回子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37705040/

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