gpt4 book ai didi

javascript - Node.js Mongo 使用 $position 而 $push-ing 无法按预期工作

转载 作者:行者123 更新时间:2023-12-02 23:36:59 26 4
gpt4 key购买 nike

我对 Node.js 或 Mongo 没有那么丰富的经验,所以请原谅我在发布此内容时可能出现的任何错误。

我有一个如下所示的架构:

var MessagesSchema = new mongoose.Schema({
title: {
type: String,
default: "Untitled Message Group"
},
members: {
type: Array
},
unreadCounts: {
type: Array
},
admins: {
type: Array
},
messages: {
sender: {
type: String
},
content: {
type: String
},
date: {
type: Number
}
}
});

来自用户的新消息被发送到“消息”部分,其信息被放入“发件人”、“内容”和“日期”数组中。我正在尝试使其一次仅加载一定数量的消息,并且您可以单击“加载更多”按钮来加载更多消息。这是有效的,但是我的数组是向后的,首先加载旧消息,最后加载最新消息。所以,我试图做到这一点,以便在输入数据时反转数组。这是我用于 $push-ing 的旧方法:

Messages.updateOne({
'_id': ObjectId(data[2])
}, {
$push: {
messages: {
sender: data[1],
content: data[0],
date: Date.now()
}
},
$inc: {
"unreadCounts.$[]": 1
}
}, function (err, result) {
//...
});

这是我尝试的新方法:

Messages.updateOne({
'_id': ObjectId(data[2])
}, {
$push: {
messages: {
$each: [{sender: data[1], content: data[0], date: Date.now()}],
$position: 0
}
},
$inc: {
"unreadCounts.$[]": 1
}
}, function (err, result) {
//...
});

这是其中一些数据的示例:

{
"_id": ObjectId("5ce4990a11fa8f0d6e27344a"),
//...
//Other stuff
//...
"messages": [{
"sender": "5c4ba709701212087e4d1bc9",
"content": "1st message sent",
"date": 1558485260497
}, {
"sender": "5c4ba709701212087e4d1bc9",
"content": "2nd message sent",
"date": 1558485261095
}, {
"sender": "5c4ba709701212087e4d1bc9",
"content": "3rd message sent",
"date": 1558485261446
}]
}

第三条消息是发送的最后一条消息。我希望顺序相反:第三条消息位于顶部,然后是第二条消息,然后是第一条消息。

但是,由于某种原因,使用 $position 似乎不起作用。项目被推到数组的末尾,而不是按预期放在开头。

有谁知道可以帮我找出原因吗?也许我只是犯了一个愚蠢的错误?提前致谢!

最佳答案

希望这有帮助:$push

型号:

var MessagesSchema = new mongoose.Schema({
title: {
type: String,
default: "Untitled Message Group"
},
members: {
type: Array
},
unreadCounts: {
type: Array
},
admins: {
type: Array
},
messages: [{
sender: {
type: String
},
content: {
type: String
},
date: {
type: Number
}
}]
});

现有数据:

{
"_id" : ObjectId("5ce4990a11fa8f0d6e27344a"),
"messages" : [
{
"sender" : "5c4ba709701212087e4d1bc9",
"content" : "1st message sent",
"date" : 1558485260497
},
{
"sender" : "5c4ba709701212087e4d1bc9",
"content" : "2nd message sent",
"date" : 1558485261095
},
{
"sender" : "5c4ba709701212087e4d1bc9",
"content" : "3rd message sent",
"date" : 1558485261446
}
]
}

查询:

db.messages.updateOne({
"_id": ObjectId("5ce4990a11fa8f0d6e27344a")
},{
$push: {
messages: {
$each: [{sender:"5c4ba709701212087e4d1bc9" , content: "4th message sent", date: Date.now()}],
$sort: {date: -1}
}
}
})

查询结果:

{
"_id" : ObjectId("5ce4990a11fa8f0d6e27344a"),
"messages" : [
{
"sender" : "5c4ba709701212087e4d1bc9",
"content" : "4th message sent",
"date" : 1558575451749
},
{
"sender" : "5c4ba709701212087e4d1bc9",
"content" : "3rd message sent",
"date" : 1558485261446
},
{
"sender" : "5c4ba709701212087e4d1bc9",
"content" : "2nd message sent",
"date" : 1558485261095
},
{
"sender" : "5c4ba709701212087e4d1bc9",
"content" : "1st message sent",
"date" : 1558485260497
}
]
}

关于javascript - Node.js Mongo 使用 $position 而 $push-ing 无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56247946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com