Expressjs と mongoosejs を使用して記述された Web API があります。
アプリのメイン スキーマには、permissions
配列フィールドを含むサブドキュメント が含まれています。これらの配列には、そのドキュメントに対してアクションを実行できるユーザーの ID が含まれています。
read
サブドキュメント配列フィールドの値によって、そのコレクションに対するクエリの結果を制限しようとしています:
主なスキーマは次のとおりです。
var MainSchema = new Schema({
uri: { type: String, required: false },
user: { type: String, required: false },
groups: [String],
tags: [String],
permissions: {
read: [String],
update: [String],
delete: [String]
}
});
permissions.read
配列に特定の値を持つドキュメント、またはその配列が空のドキュメントを返したいです。
私のコードはエラーをスローしませんが、結果を制限しません。指定された値と一致せず、空ではないドキュメントがまだ取得されます。
これが私が持っているものです:
var MainModel = mongoose.model('MainSchema', MainSchema);
app.get('/api/search', function (req, res) {
var query = MainModel.find({'uri': req.query.uri });
// This works fine
if (req.query.groups) {
query.where('groups').in(req.query.groups);
}
else if (req.query.user) {
query.where('user').equals(req.query.user);
}
// How can I return only documents that match req.query.user or ""?
query.where('permissions.read').in([req.query.user, ""]);
query.exec(function (err, results) {
if (!err) {
return res.send(results);
} else {
return console.log(err);
}
});
});
句が、句に渡された配列の各値に対して各where
要素の値をテストしていないという予感があります。permissions.read
in
ありがとう。
編集:これは返されるべきではないドキュメントですが、(permissions.read配列には現在のユーザーのIDではない値が含まれていることに注意してください):
{
"user": "firstname@gmail.com",
"uri": "http://localhost:3000/documents/test",
"permissions": {
"delete": [
"firstname@gmail.com"
],
"update": [
"firstname@gmail.com"
],
"read": [
"firstname@gmail.com"
]
},
"tags": [],
"groups": [
"demo",
"2013"
]
}
EDITED : モデル/スキーマの混乱を修正しました。これは私のコードにはありませんでしたが、コピー/貼り付けでは除外されていました。ありがとう。