首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >尝试填充每个聊天室的每个所有者

尝试填充每个聊天室的每个所有者
EN

Stack Overflow用户
提问于 2019-09-06 20:31:45
回答 1查看 36关注 0票数 0

每个聊天室由两个所有者组成,一个是用户本身,另一个是另一方。我正在尝试提取对方的用户名,以便将其与聊天室id一起发送。

我已经尝试填充所有者,以便我可以提取对方的详细信息。填充不起作用

代码语言:javascript
代码运行次数:0
运行
复制
  const chatRoomSchema = new mongoose.Schema({ 
   owners:[{
        type:mongoose.Schema.Types.ObjectId,
        required:true,
        ref:'User'
   }]

   },{
      timestamps:true  
       })

    //virtuals to relate chatroom with messages
       chatRoomSchema.virtual('chatter', {
             ref:'message',
               localField : '_id',
              foreignField:'room'
             })

        chatRoomSchema.set('toObject', { virtuals: true });
         chatRoomSchema.set('toJSON', { virtuals: true });

       const ChatRoom = mongoose.model('chatroom',chatRoomSchema)

//聊天室获取对方详细信息的路径

代码语言:javascript
代码运行次数:0
运行
复制
        router.get('/chatrooms',auth, async (req, res) => {

       const user = req.user

     try {

    //Getting all chatrooms
    const chatroom = await ChatRoom.find({owners:{$all:[user._id]}})


    const chatrooms = await chatroom.populate('owners').execPopulate()
    res.send(chatrooms) 

    } catch (error) {
    res.status(500).send(error)
 }

 })

    const chatroom = await ChatRoom.find({owners:{$all:[user._id]}})

给出以下结果

代码语言:javascript
代码运行次数:0
运行
复制
    [
       {
       owners: [
          "5d6caefdbb6f2921f45caf1d",
          "5d6caee9bb6f2921f45caf1b"
         ],
        _id: "5d6ccf5d55b38522a042dbb2",
          createdAt: "2019-09-02T08:14:21.734Z",
         updatedAt: "2019-09-02T08:14:21.734Z",
        __v: 0,
       id: "5d6ccf5d55b38522a042dbb2"
        },
       {
           owners: [
       "5d6dfcd6e3b11807944348b8",
       "5d6caefdbb6f2921f45caf1d"
                      ],
      _id: "5d6dfd48e3b11807944348ba",
          createdAt: "2019-09-03T05:42:32.572Z",
          updatedAt: "2019-09-03T05:42:32.572Z",
         __v: 0,
      id: "5d6dfd48e3b11807944348ba"
      }
      ]

但是填充给出了{}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-07 23:13:42

我试图做的是提取每个聊天室中的另一方,并将他们发送回客户。采取了以下步骤

1)填充聊天室的所有者

代码语言:javascript
代码运行次数:0
运行
复制
  const chatrooms = await ChatRoom.find({owners:{$all:[user._id]}}).populate('owners','-password').exec()

2)将所有所有者提取到一个数组中

代码语言:javascript
代码运行次数:0
运行
复制
  const allowners = chatrooms.flatMap(room => room.owners) 

3)提取每个聊天室中除用户之外的所有所有者

代码语言:javascript
代码运行次数:0
运行
复制
  //declared userid = user._id
  const vendors = allowners.filter(item => !item.equals(userid))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57822110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档