我有一個訊息傳遞應用程式,其中對話模型存盤獨特對話的參與者。
我正在嘗試查詢參與者陣列中有兩個 userId 的特定對話,但我收到錯誤訊息'Query filter must be an object, got an array'。
我嘗試將陣列放入一個物件中,但它不起作用,并且不確定如何使此查詢起作用,或者是否有更好的方法來執行此搜索。
我究竟做錯了什么?
模型
const conversationSchema = mongoose.Schema(
{
participants: [
{
type: mongoose.Schema.Types.ObjectId,
ref: `User`
}
]
}
)
快速路線代碼
const existingConvo = await Conversation.findOne({
participants: { $elemMatch: [msg.senderId, msg.recId] },
// ^ Query filter must be an object, got an array
})
uj5u.com熱心網友回復:
您的用例應該需要$all而不是$elemMatch因為您需要participants陣列在查詢陣列中包含兩個/所有用戶。
你的代碼應該是這樣的:
const existingConvo = await Conversation.findOne({
participants: { $all: [msg.senderId, msg.recId] }
})
這里是Mongo 游樂場,供您參考本$all機 mongo 查詢的行為。
uj5u.com熱心網友回復:
用 $all 替換 $elemMatch 并且它起作用了。謝謝@ray
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/392820.html
