私は以下のようなテーブル構造を持っています。既存の文書または新しく追加された文書の入手方法
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6b8"),
"product" : "product1",
"title" : "Alt Summit 1",
"category" : "category1",
"order" : 1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6b9"),
"product" : "product2",
"title" : "Alt Summit 2",
"category" : "category1",
"order" : 2
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6ba"),
"product" : "product1",
"title" : "Alt Summit 1",
"category" : "category1",
"order" : 2,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bb"),
"product" : "product2",
"title" : "Alt Summit 2",
"category" : "category1",
"order" : 1,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bc"),
"product" : "product3",
"title" : "Alt Summit 3",
"category" : "category1",
"order" : 3,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bd"),
"product" : "product4",
"title" : "Alt Summit 4",
"category" : "category1",
"order" : 4
}
まず、データベース構造について説明します。
ウェブサイトのすべてのユーザーにデフォルトの製品があり、ユーザーは自分の製品をリストに追加することも、既存のリストを並べ替えることもできます。彼らが新しい製品を追加すると、ユーザー名で追加されます。彼らが商品を再注文するとき、私は既存のデフォルトレコードを取得し、ユーザー名を追加して挿入し、注文を変更します(上記のデータを守っていただければ分かります)。
ここで、ユーザー固有のカテゴリの製品を入手するにはどうすればよいですか。
たとえば、カテゴリ1のuser1のすべての商品を取得する必要がある場合、出力は次のようになります(注文フィールドに基づいてソートされます)。上記のデータを慎重に守っていただいた場合は、add_byという名前の追加フィールドが追加され、注文が変更された同じ製品が繰り返されます。私はユーザーがそれをカスタマイズした場合、ユーザーの注文を取得したい、デフォルトの注文ではない。
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bb"),
"product" : "product2",
"title" : "Alt Summit 2",
"category" : "category1",
"order" : 1,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6ba"),
"product" : "product1",
"title" : "Alt Summit 1",
"category" : "category1",
"order" : 2,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bc"),
"product" : "product3",
"title" : "Alt Summit 3",
"category" : "category1",
"order" : 3,
"added_by" : user1
}
{
"_id" : ObjectId("5870f1d9dd0ef6e62102e6bd"),
"product" : "product4",
"title" : "Alt Summit 4",
"category" : "category1",
"order" : 4
}
私はテーブルの構造を変更する必要がある場合には、何か提案がありますか?しかし、いつでも私は上記の出力に到達することができます。
'db.yourCollection.find({ "カテゴリー": "カテゴリ1"、 "added_by": "USER1"})。ソート({ "オーダー":1})'あなた」にカーソルを返す必要があります探していますか? – Adam
いいえ@Adamユーザーがオブジェクトの順序を変更していない場合でも、デフォルトの製品を取得する必要があります。上記のクエリでは、ユーザーが追加した製品またはユーザーが再注文した製品のみが表示されます。デフォルトで同じカテゴリの同じ商品がユーザーによって追加されている場合は、他のデフォルト商品と一緒にユーザー注文を取得する必要があります。 – Shravya
デフォルトの製品は '' added_by "'キーを持たないものとして定義されていますか?その場合は、 'db.yourCollection.find({" $または ":{category": "category1"、 "added_by": "user1"}、{"added_by":{"$ exists":false} }]})。sort({"order":1}) ' – Adam