はどのように理解する必要がありますあなたはあなたのデータベースとグループのコレクションを構成しています。
{
"_id" : ObjectId("594ea5bc4be3b65eeb8705d8"),
"group_name": "...",
"group_members": [
{
"user_id": ObjectId("<same one from users collection"),
"user_name": "Alice",
"user_profile_picture": "<link_to_imag_url>"
},
{
"user_id": ObjectId("<same one from users collection"),
"user_name": "Bob",
"user_profile_picture": "<link_to_imag_url>"
},
....
]
}
あなたのグループ文書/オブジェクトなど、それの名前、作成日、説明、のようなものの属性を持つことができる属性の一つは、使用することができ、「group_membersです」のようになります。それを構造化する一つの方法は、そうは以下のようです(IDに基づいて)ユーザーが特定のグループの一部であるかどうかを確認するためにクエリを実行するとき
MongoDB $elemMatch
演算子は、あなたのユースケースを満たすのに最適な選択肢です(例1と同様のグループデータ構造を使用している場合は、Array of Embedded Documentsのセクションをご覧ください)。 1つのまたは0のいずれかの結果を返す
db.groups.find({
_id: ObjectId("<id of group you're checking"),
group_members: {
$elemMatch: { user_id: ObjectId("<user id of user you're checking>") }
}
})
1その_id
とグループと指定されたユーザIDを持つ要素が含まgroup_members
配列が存在する場合、それ以外の場合は0
:のようなクエリ。 Nodeでこれを使用するには、 Webサーバと連携して:それまで、あなたはURL http://localhost:3000/partOfGroup?groupId=594ea5bc4be3b65eeb8705d8&userId=12345に行くことができますし、それは返す必要があり、実行中で
var MongoClient = require('mongodb').MongoClient
var ObjectID = require('mongodb').ObjectID;
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
// Connection URL
var url = 'mongodb://localhost:27017/test'; // change test to whichever db you added the collections to
app.get('/partOfGroup', (req, res) => {
if (req.query.groupId == null || req.query.userId == null) {
return res.send('Must include both groupId and userId')
} else {
MongoClient.connect(url, function(err, db) {
var collection = db.collection('groups');
collection.findOne({
_id: ObjectID(req.query.groupId),
group_members: {
$elemMatch: { user_id: req.query.userId}
}
}, function(err, result) {
return res.send(result != null)
})
})
}
});
app.listen(3000, function() {
console.log('Example app listening on port 3000');
});
ID 12345とID 594ea5bc4be3b65eeb8705d8ユーザとグループがあるかどうに応じて、真または偽そのグループで
フロントエンドコードから、ログインしたユーザーがグループページにアクセスし、グループIDとユーザーIDを適切に置き換えると、そのURLにリクエストを送信します。あなたが得た応答は、 "Join"か "Leave"ボタンを表示するかどうかを決定します。
"ユーザーがグループに参加しているかどうかに基づいています" - あなたはその条件について詳しく説明し、試したコードの一部を含めることができますか? –
問題は、私が試みたものが何とか失敗したことです。 – TheGabornator
私が欲しいのは、例えば次のようなものです。フェイスブック。あなたがグループにいない限り、参加ボタンが表示されます。あなたがいるとすぐに、離れるボタンが表示されます。単純な理論の中でその背後にあるプロセスは何ですか? – TheGabornator