Mongoose: `_id`なしでデータを入力することは可能ですか?

作成日 2014年12月26日  ·  82コメント  ·  ソース: Automattic/mongoose

API http://mongoosejs.com/docs/populate.htmlを確認して、試してみました。 populateは外国の_idのみ機能するようです。 matchオプションがある場合でも、 _idクエリ条件にフィルタリング条件を追加するだけです。 _id関係のないフィールドだけを入力する方法はありません。

私のプロジェクトでは、 _idをObjectIdとして保持し、自動インクリメント番号として別のフィールドを持っています。 たとえば、 customersモデルには、オブジェクトとして_idがあり、増分番号としてcuidがあります。 他のコレクションは、 _idではなくcuid参照しているだけです。

これをカスタマイズできるのは素晴らしいことですか?
この機能が欠落している原因となる設計上の制限はありますか?

enhancement

最も参考になるコメント

@rturk指摘してくれてありがとう、私はそのプラグインが本当に好きです。 @alexmingoiaモジュールをマングースコアにマージすることについてどう思いますか? より一般的な処理するためにvirtualsをを使用してのアイデア移入を(デシベルに永続化、実際のフィールドを持たない)は本当に強力です。

全てのコメント82件

これをカスタマイズできるのは素晴らしいことですが、今は_idます。 でも、頭のてっぺんから正当な理由を考えることはできません。 さらに調査する必要があります。

シャーディングを適切にサポートするには、他の1つのフィールドだけでなく、一連のフィールドにもデータを入力する機能がほぼ必要です。これは、私たちにとって大きなユースケースです。

たとえば、「subscription」のシャードキーを持つ可能性のあるコレクション「students」があります。 セクションモデル(学生の配列を含む)から学生データを入力すると、ドキュメントにサブスクリプションがありますが、マップするように指定するのではなく、「student」に格納されている_idに基づいてのみ検索されます。学生の「割り当て」へのドキュメントの「割り当て」フィールド。

次に、データの入力時にシャードキーなしでルックアップを実行するため、シャーディングが役に立たなくなり、データを取得するために1つではなくすべてのシャードを押す必要があります。

これは、私たちがどこで仕事をするかについてのガイダンスを得ることができれば、私たちが開発に資金を提供したり、自分たちでやったりすることをいとわないものです。 それは私たちの会社(GradeCam)の大きなニーズです。

@taxilianshardKeyスキーマオプションを設定していますか? そのオプションの目的はAFAIKです。

私はこの問題の解決策を探していたので、実際にはまだそれを始めようとはしていません。 PopulateはshardKeyを考慮に入れていますか? 私の理解では、shardKeyは更新と挿入にのみ影響しました

「参加」するフィールドを指定できると便利です。たとえば、userId(つまり、_id)フィールドだけでなく、userType、userGroupなどでも入力できるようにしたいと思います。
ありがとう!

+1

+1は非常に便利です

ここで同じ+1!

+1これが大好き

+1

+1

+1

keyなどのパラメーターを追加することで、入力する変数を選択できると特に便利です。

たとえば、のauthor commentsパラメーターと

{
author: "user1",
comments:["comment5", "comment6"],
title:"Post1"
}

「key」のようなパラメータを追加して、検索するパラメータをmongoに知らせることができると便利です。

Posts.find().populate([{path:"author", model:"Users", key:"username"}, {path:"comments", model:"Comments", key:"title"}])

これにより、 authorパラメーターにユーザー名で見つかったユーザーが入力され、 commentsパラメーターにタイトルで見つかったコメントが入力されます(タイトルごとのコメントは少し非現実的ですが、ポイント)。

+1

+1

+1

+1

+1

+1

+1

大いに同意します。 カスタムの母集団スキームを定義できる機能が欲しいです。 これは、ファイルパスである1つ以上のフィールドを持ち、データをストレージから読み取ることができるスキーマに最適です。

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

次のコードを試してください: https

実際、Alexのコードをメインリポジトリにマージせず、これをコア機能にする理由はありますか?

@rturk指摘してくれてありがとう、私はそのプラグインが本当に好きです。 @alexmingoiaモジュールをマングースコアにマージすることについてどう思いますか? より一般的な処理するためにvirtualsをを使用してのアイデア移入を(デシベルに永続化、実際のフィールドを持たない)は本当に強力です。

それが理想的です。 Query.prototype.populateやその他のコア機能をオーバーロードするため、コアの方がはるかに優れています。

プルリクエストの作成を妨げる唯一のことは、テストカバレッジがほとんどまたはまったくなく、ドキュメントが不足していることです。 私はそれを複数のシナリオで本番環境で使用しており、安定していますが、誰かがテストスイートを作成した場合、文書化する必要のあるいくつかの小さな問題や特異性が明らかになる可能性があると思います。

誰かがテストスイートに取り組む気がありますか? そうでない場合-私はそれを行うことができますが、来月までに着陸することは期待していません。

見てみます。 私はとにかくpopulateを書き直す

コードについて質問がある場合は、IRC(freenode、 amingoia )またはgitterでpingしてください。

https://github.com/whitecolor/mongoose-fillは、他のモデルのデータを使用してデータを入力するのにも最適です

+1

+1

+1

これは必須です:)

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+3

+1

このページは役に立ちましたか?
0 / 5 - 0 評価