0
我有以下型號貓鼬查詢子文檔或空
var schema = new Schema({
type: String,
accounts: [{ type: ObjectId, ref: "Account", index: 1 }],
accountTypes: [String],
headline: String,
contents: String,
date: { type: Date, "default": Date.now }
});
我需要一個查詢,其基於一個帳號,讓我滿足其中之一,所有文檔。
accounts.length === 0 && accountTypes.length === 0
accounts.length === 0 && accountTypes.indexOf(account.type) !== -1
accounts.indexOf(account.type) !== -1 && accountTypes.length === 0
什麼是在儘可能少的步驟可以執行此查詢的最佳方法是什麼?我可以在單個查詢中執行此操作嗎?怎麼樣?
我知道我可以將這些查詢放在彼此的頂部,但它並不感覺非常高效。
這是我到目前爲止,但我不知道它是否會工作。
Notification.find({
$or: [
{ $and: [{ $where: "this.accounts.length === 0" }, { $where: "this.accountTypes.length === 0" }] },
{ $and: [{ $where: "this.accounts.length === 0" }, { accountTypes: account.type }] },
{ $and: [{ $where: "this.accountTypes.length === 0" }, { accounts: account._id }] }
]
}, function (err, notifications) {
// stuff
});
我想你可以通過進一步簡化該消除'$和's,並將每個'$和'數組元素組合成一個對象。 – JohnnyHK