gpt4 book ai didi

javascript - 从 Mongoose 获取现有的嵌入文档

转载 作者:行者123 更新时间:2023-11-28 02:32:21 25 4
gpt4 key购买 nike

我正在尝试将社交媒体中的 friend 缓存在用户的文档中,但在存储/取回他们时遇到问题。首先,我盲目地剥离他们的 friend 缓存,然后用我新获取的数据来填充它,但通过这一过程,我发现嵌入的文档在所有用户中必须是唯一的(我有几个 friend 是相同的)在我的测试帐户中,我得到:

{"name":"MongoError","err":"E11000 duplicate key error index: test-dev.users.$friends.outsideID_1  dup key: { : \"1205314313242\" }","code":11001,"n":0,"connectionId":274,"ok":1} 

因此我知道,由于该嵌入文档存在于我的其他已注册和更新的帐户中,因此无法创建该文档(outsideID 是索引,因为我计划稍后使用它进行搜索))然后我开始尝试OutsideFriend.find({'outsideID':{$in:friendsIDs}}(其中friendsIDs是我从SM查询中获得的id数组)等..然后在回调中我经历并尝试添加新 friend 并将现有文档添加到有问题的用户中,这样它就不会尝试在系统中复制它。但是,无论出于何种原因,OutsideFrind.find() 永远不会返回任何文档...这让我思考嵌入式文档不是集中的......但是为什么第一次尝试会失败?

我该怎么做? (架构如下,如果您需要任何其他信息,请告诉我!)

当前架构:

//External friend model                                                                                                                                                                                              
var OutsideFriend = new Schema({
outsideID:{type:String, index:true, unique:true}
,username:String
,location:String
,avatarURL:String
});

//User model
var User = new Schema({
avatarURL:String
,mySMID:String
//Social Media info
,smID:{type:String, index:true, unique:true}
,tok:String
,tokSec:String
,friends:[OutsideFriend]
};

最佳答案

你的问题有很多内容,但是如果你想查询OutsideFriend独立于User ,那么您不应该将它们嵌入 User 中模型。相反,只需存储 ObjectId引用 friend 然后populateUser中当您需要完整的详细信息时。除非您发现需要,否则不要过早地使用嵌入式副本进行优化,因为这会带来一致性挑战。

所以你的User模型将更改为:

var User = new Schema({
avatarURL:String
//Social Media info
,smID:{type:String, index:true, unique:true}
,tok:String
,tokSec:String
,friends:[{type: ObjectId, ref: 'OutsideFriend'}]
};

关于javascript - 从 Mongoose 获取现有的嵌入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13947077/

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