sql >> データベース >  >> NoSQL >> MongoDB

MeteorとMongoDBを使用して配列内のオブジェクトからサブドキュメントを返す方法

    !解決済み!

    ここでの問題は、パッケージ aldeed:collection2 が何であるかを知らなかったことです。 私のコードをやっていた。このパッケージを追加して、OrionJS を使用しました。 (これがgithubページ です。 )。そして、この aldeed:collection2 に気づきませんでした。 私のすべての更新で検証を強制していました。私は以前これに遭遇していましたが、それは私にエラーを与えていました。以前は、エラーを追跡することができました。今回はエラーなしでした どこでも。配列は更新されますが、オブジェクトは空になります。とても紛らわしい。 aldeed:collection2 に問題を投稿します のプロジェクトページ。

    プロジェクトのドキュメント から :"[ aldeed:collection2 は]Mongo.CollectionにスキーマをアタッチできるMeteorパッケージです。 挿入および更新時に、そのスキーマに対して自動的に検証します クライアントまたはサーバーのコードから。」

    ドキュメント 修正については、こちら をご覧ください。 。

    解決策:

    aldeed:simple-schema を使用しているため および aldeed: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 にもサインアップしました SachaGreif から質問する 1分あたり1ドル。

    ...私のmongoデータベースが機能していないと思い始めていました。おそらく私のモンゴ インストールが壊れていましたか?

    それで、それに対するテストがあります...この拷問の2日後、それはついに私に来ました-ただmongoコンソールでアップデートを試してください...(duh)

    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が更新を実行できることを知ったら-知っていた 問題は私の流星のセットアップにあるはずでした。もしこれが問題だったら、私は今までに流星の問題を見つけていただろう。私はこれを理解しようとしてグーグルの暗い隅々を検索しました。

    私が奇妙なを持っていたことを思い出すのにそう長くはかかりませんでした 以前の検証の問題。これらの検証の問題を除いて、常にエラーが発生しました。エラーがなく、配列が空のオブジェクトで更新されただけであるという事実は、本当に私をループに陥らせました。

    私が学んだこと:

    1. 最初に流星が失敗した場合は、mongoコンソールを試してください...
    2. @DavidWeldon による のコメント-私がずっと前に試したかもしれないもう1つの優れたデバッグ手法は、新しいmeteorプロジェクトを開始してコードをテストし、パッケージを1つずつ追加して、いつ/かどうかを確認することです。それらのいずれかがコードを壊します。このテストでは、基本的にコードが正しく、パッケージが追加されているため、添付されたスキーマのみが必要であることが指摘されていました。
    3. やみくもにパッケージを追加しないでください。 aldeed:collection2 などのパッケージが開発の流れを変えるかどうか/いつ変更するかを理解する

    ありがとうございます:

    @MichelFloyd に感​​謝します および @David Weldon この問題に関するすべてのあなたの助けのために。

    重要なリンク:

    1. よくある間違い からかなりのことを学びました @DavidWeldon によって作成されました
    2. aldeed:collection2のドキュメント
    3. aldeed:simple-schemaのドキュメント
    4. この流星チュートリアル> --fetch()とその有用性について説明しています。これは、この問題のトラブルシューティング中に役立ちました。
    5. 更新に関するドキュメント を確認する MongoDBから
    6. MongoDB$addToSetドキュメント
    7. MongoDB$pushドキュメント
    8. [MongoDB Biosサンプルコレクション]( https:// docs .mongodb.com / manual / reference / bios-example-collection /] -このようなドキュメントを調べた後、データベースの設計に問題がないことが本当にわかりました。これをずっと行う方法があるはずです(そして明らかにあります)

    関連する質問:

    [解決済み]MeteorJSのMongoDBコレクションのサブドキュメントの配列を更新する方法




    1. MongoDBクエリコメントとユーザー情報

    2. 反応アプリでのmongodbへの簡単な接続

    3. Meteor.jsで、2つの開発プロジェクトで同じMongoインスタンスを使用するにはどうすればよいですか?

    4. Node.jsは、2つのマングースの検索が終了したことを検出します