25

以下のサンプルスキーマにデータを入力する方法、またはそれが可能かどうかはわかりません。以下のようなオブジェクト内に参照を含めることはできますか?可能であれば、どのようにデータを入力しますか?例.populate('map_data.location');

var sampleSchema = new Schema({
  name: String,
  map_data: [{
    location: {type: Schema.Types.ObjectId, ref: 'location'},
    count: Number
  }]
});

または、次のように、場所とカウントに2つの別々の配列を用意する必要があります。

// Locations and counts should act as one object. They should
// Be synced together perfectly.  E.g. locations[i] correlates to counts[i]
locations: [{ type: Schema.Types.ObjectId, ref: 'location'}],
counts: [Number]

最初の解決策が最善だと思いますが、Mongoose内でそれを機能させる方法が完全にはわかりません。

助けてくれてありがとう!

4

5 に答える 5

28

最初の解決策が可能です。

現在、Mongooseには制限があり(このチケットはこちらを参照)、複数レベルの埋め込みドキュメントを作成できますが、単一のドキュメント内のネストされたパス(この場合は何を求めているか)を理解するのに非常に優れています

構文例は次のとおりです。

YourSchema.find().populate('map_data.location').exec(...)

パス、orderBy、where句でのゲッター/セッターの指定などの他の機能も、ドキュメントの次の例のように、ネストされたパスを受け入れます。

personSchema.virtual('name.full').get(function () {
  return this.name.first + ' ' + this.name.last;
});

内部的にMongooseは文字列をドットで分割し、すべてを整理します。

于 2013-01-30T00:41:04.590 に答える
18

最初のオプションは問題ありませんが、誰かがそのクエリに問題がある場合map_data.location(Mongooseはオブジェクトではなく空の配列を返します)、これが機能することがわかりました。

.populate({
     path: 'map_data.location',
     model: 'Location'
})
于 2016-08-17T20:41:43.743 に答える
4
   YourSchema.find()
       .populate({
            path: 'map_data',
            populate: {
                path: 'location' 
            }
    }).exec(...)

上記のステートメントは、map_dataの配列と、各map_dataのロケーションオブジェクトを入力します。

これが誰かに役立つことを願っています。

于 2018-05-23T22:26:17.433 に答える
2

私はあなたがこれを必要とすると思います:

スキーマがこれである場合:

var sampleSchema = new Schema({
name: String,
map_data: [{
location: {type: Schema.Types.ObjectId, ref: 'location'},
count: Number
}]
});

あなたのmonggosseクエリは次のようにする必要があります:

const responseMap=await YourSchema.find()
.populate(
path: 'map_data._id',
model: 'location'
select:['nameLocation','geoPoints','count'],
).exec();
console.log(responseMap);

ただし、カウント変数はロケーションスキーマに存在する必要があり、map_dataにはIDロケーションのみが含まれている必要があります。

于 2020-05-15T15:41:42.490 に答える
0

最初のオプションが最適です。「count」はオブジェクト「map_data」の一部です。

于 2013-01-30T00:25:06.110 に答える