如何查询猫鼬父模型以从子文档返回特定值

时间:2020-07-30 20:33:02

标签: javascript mongoose mongodb-query

我正在创建一个聊天应用程序,试图将朋友添加到数据库中,但是在添加之前,我想先检查我的friends子文档,以了解当前添加的新朋友是否存在。如果朋友存在,那么我想返回一个res.json,如果它不存在,那么我想将新朋友保存到朋友数组/字段

这是我为登录用户的模式,我将其命名为User:

const int i = 0;
const int &r = i;
r = 3396; // ERROR

这是我的朋友架构,它在用户架构中作为数组:

const mongoose = require('mongoose')
const UserSchema = mongoose.Schema
const FriendSchema = './friend-model'
const mongooseUniqueValidator = require('mongoose-unique-validator')


const bcrypt = require('bcrypt')
const Friend = require('./friend-model')

const user = new UserSchema({
    username: { type: String, required: true, unique: true, trim: true },
    email: { type: String, require: true, unique: true, trim: true }, 
    password: { type: String, required: true },
    friends: [FriendSchema]
},
{ timestamps: true }
)

user.plugin(mongooseUniqueValidator)




user.pre('save', function (next) {
  var user = this;
  bcrypt.hash(user.password, 10, function (err, hash) {
    if (err) {
      return next(err);
    }
    user.password = hash;
    next();
  })
});


const User =  mongoose.model('User', user) 



module.exports = User

这是我在终端上查询数据库文件时的样子,以显示要从朋友内部选择的数据。

const mongoose = require('mongoose');
const FriendSchema = mongoose.Schema
const MessageSchema = './message-model'

const friend = new FriendSchema({
    user: {type: mongoose.Types.ObjectId, ref: 'User'},//or just have the username in string format
    outgoingMessages: [MessageSchema],
    incomingMessages: [MessageSchema]
})

module.exports = mongoose.model('Friend', friend);

在nodejs中进行如下查询,“用户名:”采用已登录用户的名称,该用户应返回带有其自己的朋友数组的特定用户文档,“用户: “:

> db.users.find().pretty()
{
    "_id" : ObjectId("5f1ffb60d7c2a51c50b7b128"),
    "friends" : [
        {
            "outgoingMessages" : [ ],
            "incomingMessages" : [
                "Hello"
            ],
            "_id" : ObjectId("5f21a7cb825c111002a5f721"),
            "user" : ObjectId("5f1ffc62c7b4c01c856335d9")
        },
        {
            "outgoingMessages" : [ ],
            "incomingMessages" : [
                "Hello"
            ],
            "_id" : ObjectId("5f21a7ce825c111002a5f722"),
            "user" : ObjectId("5f1ffc62c7b4c01c856335d9")
        },
        {
            "outgoingMessages" : [ ],
            "incomingMessages" : [
                "Hello"
            ],
            "_id" : ObjectId("5f21a7cf825c111002a5f723"),
            "user" : ObjectId("5f1ffc62c7b4c01c856335d9")
        },
        {
            "outgoingMessages" : [ ],
            "incomingMessages" : [
                "Hello"
            ],
            "_id" : ObjectId("5f21a7d4825c111002a5f724"),
            "user" : ObjectId("5f1ffc62c7b4c01c856335d9")
        },
        {
            "outgoingMessages" : [ ],
            "incomingMessages" : [
                "Hello"
            ],
            "_id" : ObjectId("5f21a7da825c111002a5f725"),
            "user" : ObjectId("5f1ffc62c7b4c01c856335d9")
        },
        {
            "outgoingMessages" : [ ],
            "incomingMessages" : [
                "Hello"
            ],
            "_id" : ObjectId("5f21a7e1825c111002a5f726"),
            "user" : ObjectId("5f1ffc62c7b4c01c856335d9")
        },
        {
            "outgoingMessages" : [ ],
            "incomingMessages" : [
                "Hello"
            ],
            "_id" : ObjectId("5f21a827495a4e1061003c3a"),
            "user" : ObjectId("5f1ffc62c7b4c01c856335d9")
        },
        {
            "outgoingMessages" : [ ],
            "incomingMessages" : [
                "Hello"
            ],
            "_id" : ObjectId("5f21a89f495a4e1061003c3b"),
            "user" : ObjectId("5f1ffc62c7b4c01c856335d9")
        },
        {
            "outgoingMessages" : [ ],
            "incomingMessages" : [
                "Hello"
            ],
            "_id" : ObjectId("5f21a9022edb211086b340ba"),
            "user" : ObjectId("5f1ffc62c7b4c01c856335d9")
        }
    ],
    "username" : "***",
    "email" : "*************",
    "password" : "********************",
    "createdAt" : ISODate("2020-07-28T10:18:08.312Z"),
    "updatedAt" : ISODate("2020-07-29T16:51:14.499Z"),
    "__v" : 9
}

我要检查特定用户文档中是否存在特定朋友,我在查询中做错了什么

0 个答案:

没有答案