MongoDB / Mongoose - 有条件的 FindById。匹配数组内 Object 内的数组值
MongoDB / Mongoose - FindOneById with conditions. Match value of Array within Object thats within an Array
我知道这个问题的标题很啰嗦,但如果我提供一个例子,我希望你明白我的意思。
这是我的 MongoDB 结构:
{
"_id":{
"$oid":"62408e6bec1c0f7a413c093a"
},
"visitors":[
{
"firstSource":"123456",
"lastSource":"",
"email":"",
"deviceIds":[
"a7d5083e5c5df543a3e5b4db0742e866f554705353fae6fd6d30984d33c18ade"
],
"_id":{
"$oid":"624094328dd6ff9ac420c84a"
}
},
{
"firstSource":"123456",
"lastSource":"",
"email":"",
"deviceIds":[
"8972892x2sa3e5b4db0742e866f554705353fae6fd6d31892hdwif"
],
"_id":{
"$oid":"6240952c4d246158b74bb239"
}
}
]
}
我想做的是检查是否有某个deviceId的访问者。如果有,我不想做任何事情,但如果没有,我想添加一位新访客。
这就是我想在代码中做的事情:
// Find record based on ObjectID
const record = await UserRecord.findById(recordId);
// Check if the device id is already on the database within the record
if(record.visitors.deviceIds does not contain "certain deviceId") {
// Add a new visitor inside of the visitor array
record.visitors.deviceIds += "visitor with certain deviceId";
}
所以基本上我想检查是否存在另一个数组内的 object 数组内的字符串。
你明白我的意思吗?如果您不明白我的问题,请告诉我。
非常感谢你们的帮助。我已经坚持了几天了,似乎无法弄清楚。
亲切的问候,
诺亚
使用下面的查询会返回匹配的记录,如果结果为空,可以用来插入记录
var result = UserRecord.find({
"_id": recordId,
"visitors.deviceIds": {
"$elemMatch": {
"$in": deviceId
}
}
});
我知道这个问题的标题很啰嗦,但如果我提供一个例子,我希望你明白我的意思。
这是我的 MongoDB 结构:
{
"_id":{
"$oid":"62408e6bec1c0f7a413c093a"
},
"visitors":[
{
"firstSource":"123456",
"lastSource":"",
"email":"",
"deviceIds":[
"a7d5083e5c5df543a3e5b4db0742e866f554705353fae6fd6d30984d33c18ade"
],
"_id":{
"$oid":"624094328dd6ff9ac420c84a"
}
},
{
"firstSource":"123456",
"lastSource":"",
"email":"",
"deviceIds":[
"8972892x2sa3e5b4db0742e866f554705353fae6fd6d31892hdwif"
],
"_id":{
"$oid":"6240952c4d246158b74bb239"
}
}
]
}
我想做的是检查是否有某个deviceId的访问者。如果有,我不想做任何事情,但如果没有,我想添加一位新访客。
这就是我想在代码中做的事情:
// Find record based on ObjectID
const record = await UserRecord.findById(recordId);
// Check if the device id is already on the database within the record
if(record.visitors.deviceIds does not contain "certain deviceId") {
// Add a new visitor inside of the visitor array
record.visitors.deviceIds += "visitor with certain deviceId";
}
所以基本上我想检查是否存在另一个数组内的 object 数组内的字符串。 你明白我的意思吗?如果您不明白我的问题,请告诉我。
非常感谢你们的帮助。我已经坚持了几天了,似乎无法弄清楚。 亲切的问候, 诺亚
使用下面的查询会返回匹配的记录,如果结果为空,可以用来插入记录
var result = UserRecord.find({
"_id": recordId,
"visitors.deviceIds": {
"$elemMatch": {
"$in": deviceId
}
}
});