1

比較的単純な質問がありますが、何度も何度も行き詰まります。目的の結果を得るためにドキュメントを再構築しようとしたのは、これが 4 回目だと思います。

次の構造を持つマングースでデータベースを作成したい:

ユーザーには、多くのグループ投稿およびコメントがあります。グループ投稿、およびコメントはすべてUserに属します。投稿は多くのグループに属することも、まったく属さないこともあります。コメントは特定の投稿に属します。

これが私がこれまでに持っているものです:

ユーザースキーマ

var userSchema = mongoose.Schema({

    local            : {
        email        : String,
        password     : String,
        username     : String,  
        created: {type:Date, default: Date.now} 

    }

});

PostSchema

var PostSchema   = new Schema({
    url: String, 
    highlighted: String, 
    comment: String, 
    image: String, 
    timeStamp: String, 
    description: String, 
    title: String,
    created: {type:Date, default: Date.now}, 
    private: Boolean, 
    favorite: Boolean, 
    readlater: Boolean, 
    postedBy: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    },
    comments: [{
        text: String,
        postedBy: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'
        }
    }], 
    groups: [{
        name: String,
        postedBy: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'
        }
    }]
});

グループスキーマ

var GroupSchema = Schema({
    name    : String, 
    created: {type:Date, default: Date.now},
    postedBy: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    }
});

この仮定は間違っているかもしれませんが、投稿とユーザー、コメントと投稿の関係は、あるべき姿であると思います。間違っている場合は修正してください。私が今抱えている主な問題は、私のグループとの関係を投稿することです。現在、ご縁は一切ございません。私ができる限り、グループが投稿に属しているかのように見えますが、その逆ではありません。グループを構築するために私が考えることができる唯一の他の方法は次のようになります:

var GroupSchema = Schema({
        name    : String, 
        created: {type:Date, default: Date.now},
        postedBy: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'
        }, 
        posts: [{
            title: String, 
            Url: String,
            comments: [{
                text: String
            }]
            etc....
        }]
    });

上記の構造で見られる唯一の問題は、投稿がグループの一部である必要があることです。グループはオプションにしたいと考えています。私が知る限り、これもうまくいきません。

これをどのように構成すべきかについてアドバイスがあれば、非常に助かります。

前もって感謝します。

4

1 に答える 1

0

最善の策は、グループとコメント スキーマを投稿ドキュメント内に埋め込むことです。例えば、

var GroupSchema = Schema({
    name: String, 
    created: { type:Date, default: Date.now },
});

var CommentSchema = Schema({
    text: String,
    postedBy: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    }
});


var PostSchema = new Schema({
    url: String,
    ...,
    postedBy: {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'User'
    },
    comments: [CommentSchema] 
    groups: [GroupSchema]
});

特定のグループの投稿を探している場合は、次のようにクエリを作成できます。ただし、これよりも複雑なクエリを作成できます。

Post.elemMatch("groups", {name: {$in: ["group1", "group2"]}}).then(...)
于 2015-11-26T08:21:43.583 に答える