20

私は3つのスキーマを持っています:

var User1Schema = new Schema({
    name: {type:String , trim: true, required: true },
    status: {type:Number, required: true, default:1}
},{collection:"user_1"});

var User2Schema = new Schema({
    name: {type:String , trim: true, required: true },
    email: {type: String, required: true, index: {unique: true} },
    status: {type:Number, required: true, default:1}
},{collection:"user_2"});

var ConversationSchema = new Schema( {

    participants: [{user:{type: ObjectId, required: true}],
    creator: {type: ObjectId, required: true},

    status: { type:Number, required: true, default:1 }

}, { collection:"conversation" } );

ConversationSchema には、User1Schema または User2Schema のタイプになる可能性があるため、ref オプションを持つ Creator フィールドがあります。

マングースを使用して作成者フィールドにデータを入力するにはどうすればよいですか

4

2 に答える 2

25
Conversation.find().populate('creator', null, 'User2').exec(callback)

ドキュメントは明確ではありません。すぐに更新されます。

また、この構文はv3.6ではより単純になります。

于 2013-02-15T00:03:39.943 に答える
0

2019 年 3 月 27 日現在、その方法は次のとおりです。

1)参照を提供せずに、入力するフィールドを ObjectId として設定します。

var eventSchema = new Schema({
  name: String,
  // The id of the corresponding conversation
  // Notice there's no ref here!
  conversation: ObjectId
});

2) クエリがクエリとともにスキーマのモデルを渡すようにします。

Event.
  find().
  populate({ path: 'conversation', model: Conversation }).
  exec(function(error, docs) { /* ... */ });

参照: https://mongoosejs.com/docs/populate.html#cross-db-populate

于 2019-03-27T10:09:52.230 に答える