首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找出一个聊天室的主人ids蒙鹅

找出一个聊天室的主人ids蒙鹅
EN

Stack Overflow用户
提问于 2019-09-01 09:47:36
回答 2查看 263关注 0票数 0

我试图找出一个聊天室与两个业主(发送者和接收者)从DB。如果没有这样的聊天室,就必须使用提供的is和名称创建聊天室。

我正在尝试创建一个用户登录和db存储的聊天应用程序。

代码语言:javascript
复制
//Mongoose Schema

const chatRoomSchema = new mongoose.Schema({
room:{
    type: String,
    trim:true,
    required:true
},

owners:[{
    owner:{
        type:mongoose.Schema.Types.ObjectId,
        required:true,
        ref:'User'
    }
}]

},{
timestamps:true  
})

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

//what i tried

const id1 = req.params.id1
const id2 = req.params.id2
let chatroom = ChatRoom.find({owners:{$all:[{owner:id1}, {owner:id2}]}}) 

    if(!chatroom){
        console.log('no chat room')
        chatroom = new ChatRoom({room:'123', owners:[{owner:id1},{owner:id2}]})//creating a new chatroom

          chatroom.save()
         res.send(chatroom)
    }

我想找个聊天室,里面有两个主人的身份证。如果没有这样的聊天室,我们必须创建一个拥有两个ids的聊天室。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-01 15:01:56

  1. 您需要一个所有者ids的数组,而不是owner对象,所以请更改:
代码语言:javascript
复制
owners:[{
    owner:{
        type:mongoose.Schema.Types.ObjectId,
        required:true,
        ref:'User'
    }
}]

代码语言:javascript
复制
owners:[{
    type:mongoose.Schema.Types.ObjectId,
    required:true,
    ref:'User'
}]
  1. 你可以和两个业主住在一起,比如:
代码语言:javascript
复制
var arr = ['5d6bd3b374068124c461975a', '5d6bd3b374068124c4619759']
  ChatRoom.find({owners:{$all:arr}}, (err, room) =>{...}

全样本项目:

代码语言:javascript
复制
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const init = false

mongoose.connect('mongodb://127.0.0.1/stackoverflow_play5')
//Mongoose Schema

const userSchema = new Schema({
username: String
})

const chatRoomSchema = new mongoose.Schema({
room:{
    type: String,
    trim:true,
    required:true
},

owners:[{
    type:mongoose.Schema.Types.ObjectId,
    required:true,
    ref:'User'
}]

},{
timestamps:true  
})

const ChatRoom = mongoose.model('Chatroom',chatRoomSchema)
const User = mongoose.model('User',userSchema)

if(init){
  User.insertMany([{username: 'yaya'}, {username: 'hoho'}, {username: 'mil'}], (err, users) => {
    ChatRoom.insertMany([{room: 'r1', owners: [users[0]._id, users[1]._id]}], (err, chatrooms) => console.log('done.'))
  })
}else{
  //ChatRoom.find({}, (err, users)=>{console.log(users)})
  var arr = ['5d6bdfe9c0d0af00ec68932c', '5d6bdfe9c0d0af00ec68932d']
  ChatRoom.find({owners:{$all:arr}}, (err, room) =>{
    console.log(room)
  })
}
票数 0
EN

Stack Overflow用户

发布于 2019-09-01 10:11:05

您可以将空间更改为由mongoo自动生成,而不是find然后创建,如果找不到,则可以使用findOneAndUpdate

代码语言:javascript
复制
const chatRoomSchema = new mongoose.Schema({
room:{
    type: mongoose.Schema.Types.ObjectId,
    auto: true
},

owners:[{
    owner:{
        type:mongoose.Schema.Types.ObjectId,
        required:true,
        ref:'User'
    }
}]

},{
timestamps:true  
})

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

//what i tried

const id1 = req.params.id1
const id2 = req.params.id2
const options = { upsert: true, new: true, setDefaultsOnInsert: true };

let chatroom = ChatRoom.findOneAndUpdate(
            {owners:{$all:[{owner:id1}, {owner:id2}]}}, 
            { owners:[{owner:id1},{owner:id2}]  } , 
            options, function(error, result) {

         if (error) return;

    // do something with the document
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57744911

复制
相关文章

相似问题

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