私がすることができるよ$addToSet
、それは重複には問題を作成しないことなく、2次元配列が、私は経由して私のリストから項目を削除したい場合は$pull
、それはMongoDBのドキュメントから行を削除することはありません。2D配列は次のように構成されています。
inviteGroup: {
biddingUserId: { type: String, lowercase: true, trim: true },
username: { type: String, lowercase: true, trim: true }
},
以下のコードに加えて、上記のモデルから表現して、$pull
これにコードを行おうとしましたreq.body.userId
biddingUserId
$pull: { inviteGroup: { $in: [req.body.userId]} }
しかし、それはうまくいかなかったようです。2D配列の行を削除するにはどうすればよいですか?私はこれでどんな助けにも感謝します!
これは、モデルと一致するmongodbでのコレクションの外観のスクリーンショットです。
Post.findByIdAndUpdate(
{ _id: req.params.id },
{
$pull: { inviteGroup: req.body.userInvited }
},
function (err, docs) {
if (err) {
console.log("err$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
console.log(err);
context.res = {
status: 500,
body: {
message: "Add Invite Error!",
error: err
},
headers: {
"Access-Control-Allow-Credentials": "true",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "PATCH, OPTIONS",
"Access-Control-Allow-Headers": "Content-Type, Set-Cookie",
"Access-Control-Max-Age": "86400",
"Vary": "Accept-Encoding, Origin",
"Content-Type": "application/json"
}
};
context.done();
} else {
context.res = {
status: 200,
body: {
message: "User Invited Successfully!",
error: err
},
headers: {
"Access-Control-Allow-Credentials": "true",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "PATCH, OPTIONS",
"Access-Control-Allow-Headers": "Content-Type, Set-Cookie",
"Access-Control-Max-Age": "86400",
"Vary": "Accept-Encoding, Origin",
"Content-Type": "application/json"
}
};
context.done();
}
});
これが実際の例です-
コレクション
{
"_id" : ObjectId("5ecc1c6af2a26b884f4272eb"),
"inviteGroup" : [
[
{
"biddingUserId" : "3",
"username" : "name3"
},
{
"biddingUserId" : "2",
"username" : "name2"
}
],
[
{
"biddingUserId" : "1",
"username" : "name1"
},
{
"biddingUserId" : "4",
"username" : "name4"
}
]
]
}
double $ elemMatchを使用してネストされた配列に到達し、positional演算子を使用して$ pullで外側の配列要素を識別し、クエリ条件で内側の配列要素を削除することに注意してください。
マングースコード
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test', {useNewUrlParser: true});
var db = mongoose.connection;
mongoose.set('debug', true);
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
// we're connected!
});
const InviteGroupSchema = new mongoose.Schema({
inviteGroup : [[{
biddingUserId: { type: String, lowercase: true, trim: true },
username: { type: String, lowercase: true, trim: true }
}]]
})
const InviteGroup = mongoose.model('InviteGroup', InviteGroupSchema, 'invitegroups');
module.exports = {
InviteGroup
}
InviteGroup.findOneAndUpdate(
{
"_id":mongoose.Types.ObjectId("5ecc1c6af2a26b884f4272eb"),
"inviteGroup": {"$elemMatch":{"$elemMatch":{"biddingUserId":"4"}}}
},
{"$pull":{"inviteGroup.$":{"biddingUserId":"4"}}},
{"new":true} ).exec((err, results) => {console.log("Results " + JSON.stringify(results));}
)
出力
{
"inviteGroup":[
[
{"biddingUserId":"3","username":"name3"},
{"biddingUserId":"2","username":"name2"}
],
[ {"biddingUserId":"1","username":"name1"}
]
],
"_id":"5ecc1c6af2a26b884f4272eb"
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加