gpt4 book ai didi

mongodb - Mongoose 更新不持久

转载 作者:行者123 更新时间:2023-12-02 00:52:01 27 4
gpt4 key购买 nike

使用 mongodb 和 mongoose,我无法使用 $push 将元素附加到数组中。运行此命令后,我检查 mongo shell,但新的附加不存在。不确定我做错了什么:

UserModel.findOne({ firstName: "bob" }, 'pets', function(err, user) {
UserModel.update(user, {
$push: {
pets: {
name: "pear", type: "pig"
}
}
}, function(err, numAffected, raw) {
if (err) console.log(err);
console.log('updated ' + JSON.stringify(numAffected));
});
});
<小时/>
Mongoose: users.ensureIndex({ username: 1 }) { unique: true, background: true }  
Mongoose: users.findOne({ firstName: 'bob' }) { fields: { pets: 1 } }
Mongoose: users.update({ pets: [ { type: 'dog', name: 'apple' }, { type: 'cat', name: 'felix' } ], _id: ObjectId("56a53d45a428cbde3c4299f8") }) { '$push': { pets: { name: 'pear', type: 'pig' } } } {}
updated {"ok":1,"nModified":0,"n":0}
<小时/>
> bob = db.users.find()[0]
{
"_id" : ObjectId("56a53d45a428cbde3c4299f8"),
"firstName" : "bob",
"lastName" : "smith",
"username" : "bob123",
"pets" : [
{
"name" : "apple",
"type" : "dog"
},
{
"name" : "felix",
"type" : "cat"
}
],
"__v" : 0
}
>

更新:更改类型字段后,仍然没有成功。这次我只是尝试插入 { $push: { pets: "sssss"} }

UserModel.findOne({ firstName: "bob" }, 'pets', function(err, user) {
UserModel.update(user,
{ $push: { pets: "sssss" }},
function(err, numAffected, raw) {
if (err) console.log(err);
console.log('updated ' + JSON.stringify(numAffected));
});
});

这是实际的 mongodb 日志:

2016-01-29T03:14:37.030+0000 I COMMAND  [conn17] command curves.$cmd command: update { update: "users", updates: [ { q: { pets: [ { petType: "pig", name: "pear" } ], _id: ObjectId('56aad0a3ef5848c231ec80ed') }, u: { $push: { pets: "sssss" } }, upsert: false, multi: false } ], ordered: true, writeConcern: { w: 1 } } ntoskip:0 keyUpdates:0 writeConflicts:0 numYields:0 reslen:55 locks:{ Global: { acquireCount: { r: 1, w: 1 } }, Database: { acquireCount: { w: 1 } }, Collection: { acquireCount: { w: 1 } } } protocol:op_query 0ms

最佳答案

这里。这是类似的代码并且它正在工作。 findbyidandupdate 需要添加一个 "new : true" 可选参数。否则,您将收到旧文档。

var express = require("express");
var app = express();
var mongoose = require("mongoose");

mongoose.connect("mongodb://localhost/population");

var db = mongoose.connection;

db.on("error", console.error.bind(console, "connection error:"));
db.once("open", function(){
var mongoose = require("mongoose");

var userSchema = new mongoose.Schema({
firstname : String,
lastname : String,
pets : []
})
var userModel = mongoose.model("User", userSchema);

var bob = new userModel({
"firstname" :"bob",
"lastname" : "Smith",
"pets" : [
{name : "apple", type : "dog"},
{name : "felix", type : "cat"}
]
})

bob.save(bob, function(err, user){
console.log(user)
});

userModel.findOneAndUpdate(
{firstname : "bob"},
{$push : {"pets" : {name : "pear", type : "pig"}}},
//THE MOST IMPORTANT PART ADD new : true
{safe : true, upsert : true, new : true},
function(err, model){
console.log(model);
}
)

})//once


app.listen(3000, function(){
console.log("listening on port: " , 3000)
})

关于mongodb - Mongoose 更新不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34982099/

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