Javascript 如何使用其他集合的子阵列数据过滤mongo集合子阵列中的数据
在node.js中,mongodb添加好友功能可以选择列表用户添加好友列表、发送好友请求、接受好友请求、删除好友请求、阻止好友请求 注册集合Javascript 如何使用其他集合的子阵列数据过滤mongo集合子阵列中的数据,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,在node.js中,mongodb添加好友功能可以选择列表用户添加好友列表、发送好友请求、接受好友请求、删除好友请求、阻止好友请求 注册集合 const mongoose = require('mongoose'); const Schema = mongoose.Schema; let Register = new Schema( First_Name:{ type: String, required: true }, Las
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
let Register = new Schema(
First_Name:{
type: String,
required: true
},
Last_Name: {
type: String
},
Email: {
type: String,
unique: true,
lowercase: true,
required: true
},
Friends:[{type: String}],
});
module.exports = mongoose.model('Register', Register);
朋友收藏
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
var ObjectId = require('mongodb').ObjectID;
let Friends = new Schema({
Requester: {
type: ObjectId,
required: true
},
Recipients: [{Recipient:{type:ObjectId},Status:{type:Number}}],
});
module.exports = mongoose.model('Friends', Friends);
内部Node.js Post API
var Register = require('../models/register.model');
var Friends =require('../models/friends.model');
router.post('/getdata',function(req,res)
{
let Email="example@example.com";
Register.findOne({ Email : Emails }, function(err, user) {
Friends.findOne({ Requester :user._id }, function(err, user1) {
Register.find({$and:[{Friends:{$nin:[user._id]}},{_id:{$ne:user1.Recipients.Recipient}}]},function(err, user2) {
console.log("user2",user2);
//Here User2 data is not coming
//How to get data so can able to list user that is not added yet in FriendList
//Mainly user1.Recipients.Recipient this is not working because //Recipients is array so how can match all data with array, if i am //using loop then find return data scope ends on inside find closing //braces only.
//Any suggestion
});
});
});
因此,如果我的答案正确,您需要执行以下操作:
var Register = require('../models/register.model');
var Friends =require('../models/friends.model');
router.post('/getdata',function(req,res) {
const email = "example@example.com";
Register.findOne({ Email: email }, function(err, user) {
if (err) {
console.error(err);
return;
}
Friends.findOne({ Requester: user._id }, function(err, friend) {
if (err) {
console.error(err);
return;
}
const reciptientIds = friend.Recipients.map(function (recipient) {
return recipient.Recipient.toString();
});
Register.find({Friends: { $ne: user._id }, {_id: { $nin: recipientIds }}, function(err, notFriendedUsers) {
if (err) {
console.error(err);
return;
}
console.log(notFriendedUsers);
});
});
});
});
注:这种“回调地狱”可以通过承诺或等待/延迟来轻松减少,最终能够解决它,下面是解决方案
var Register = require('../models/register.model');
var Friends =require('../models/friends.model');
router.post('/getdata',function(req,res)
{
let Emails="example@example.com";
Register.findOne({$and:[{ Email : Emails}] }, function(err, user) {
if (err) {
console.error(err);
return;
}
Friends
.findOne({ Requester: user._id },
{ _id: 0} )
.sort({ Recipients: 1 })
.select( 'Recipients' )
.exec(function(err, docs){
docs = docs.Recipients.map(function(doc) {
return doc.Recipient; });
if(err){
res.json(err)
} else {
console.log(docs,"docs");
Register.find({$and:[{Friends: { $ne: user._id }},{_id: { $nin: docs }},{_id:{$ne:user._id}}]}, function(err, notFriendedUsers) {
if (err) {
console.error(err);
return;
}
console.log(notFriendedUsers);
});
}
})
});
获取此错误类型错误:无法读取CoreMongoosArray.map(console.log(recipient.recipient)上未定义的属性“toString”给未定义的人我输入了一个错误:它当然应该是
收件人。收件人
。而不是收件人。收件人
不,我也试过了,我可以给你发送屏幕截图,但你的解决方案为我提供了获得最终解决方案的线索,非常感谢。酷:)请确保选择正确的答案,并根据您的发现更新答案;)没有人,我不能从你的答案中得到完整的解决方案,但这很有帮助,为什么我选择它是有帮助的,你可以尝试自己编码,我不知道如何附加屏幕截图,所以可以附加在这里,以清除这件事。