更新MongoDB集合中的一个条目

本文关键字:一个 MongoDB 集合 更新 | 更新日期: 2023-09-27 18:09:17

我不知道如何更新我的MongoDB集合中的一个条目。我已经看了c#驱动程序文档,我认为我已经非常密切地遵循了它们。

但是,我传递给Update方法的一个(或者两个?)参数是无效的。有人能告诉我我做错了什么吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Driver;
using MongoDB.Driver.Linq;

namespace Csharp_Linq
{
    class Program
    {
        public class Book
        {
            // Fields
            public string title { get; set; }
            public string author { get; set; }
            public ObjectId id { get; set; }
            // Constructors
            public Book()
            {
                this.title = "some title";
                this.author = "some author";
            }
            public Book(string title, string author)
            {
                this.title = title;
                this.author = author;
            }
        }
        static void Main(string[] args)
        {
            // Connect to the server
            string connectionString = "mongodb://localhost";
            MongoClient client = new MongoClient(connectionString);
            MongoServer server = client.GetServer();
            // Get the database then the collection
            MongoDatabase database = server.GetDatabase("tutorial");
            MongoCollection collection = database.GetCollection("books");
            // Query the collection
            int count =
                (from book in collection.AsQueryable<Book>()
                 select book)
                .Count();
            string numBooks = String.Format("This collection has {0} books.", count);
            Console.WriteLine(numBooks);
            var query =
                from book in collection.AsQueryable<Book>()
                where book.author == "Ernest Hemingway"
                select book;
            foreach (var book in query)
            {
                string bookInfo = String.Format("{0} by {1}", book.title, book.author);
                Console.WriteLine(bookInfo);
            }
            // Insert new books
            Book scaryBook = new Book("Dr. Sleep", "Stephen King");
            Book[] batch = 
            {
                new Book(),
                scaryBook
            };
            collection.InsertBatch(batch);
            // Update default book
            var query2 =
                from book in collection.AsQueryable<Book>()
                where book.title == "some title" && book.author == "some author"
                select book;
            var update = new UpdateDocument {
                { "$set", new BsonDocument("title", "War and Peace") }
            };
            BsonDocument updatedBook = collection.Update(query2, update);
            Console.ReadLine();
        }
    }
}

我有点惊讶,更新方法实际上返回一个BsonDocument。为什么会这样呢?

前面我尝试使用Update对象,如示例所示:

MongoCollection<BsonDocument> books;
var query = Query.And(
    Query.EQ("author", "Kurt Vonnegut"),
    Query.EQ("title", "Cats Craddle")
);
var update = Update.Set("title", "Cat's Cradle");
BsonDocument updatedBook = books.Update(query, update);

这个对象还存在吗?每当我在Visual Studio中输入它时,我都会得到一个错误,说对象不在命名空间中。

更新MongoDB集合中的一个条目

首先我必须包含

using MongoDB.Driver.Builders;

然后我必须将我的Linq查询转换为Mongo查询。结果代码如下:

        // Update default book
        var query2 =
            from book in collection.AsQueryable<Book>()
            where book.title == "some title" && book.author == "some author"
            select book;
        // Cast linq query to Mongo query
        var mongoQuery = ((MongoQueryable<Book>)query2).GetMongoQuery();
        var update = new UpdateDocument {
            { "$set", new BsonDocument("title", "War and Peace") }
        };
        collection.Update(mongoQuery, update);

花了一点研究才把所有的碎片都放进去!

Update对象是MongoDB.Driver.Builders名称空间的一部分,尽管这在教程中并不明显。

我想问题出在你的问题上。除非你有一本带有

的书
 book.title == "some title" && book.author == "some author"

你将找不到任何需要更新的内容。

你的第二个例子将工作(一次),如果你把它添加到你的代码文件。

using MongoDB.Driver.Builders;

您可以通过以下方式更新条目。Take case of item add to cart

db.carts.update({
_id: "the_users_session_id", status:'active'
}, {
 $set: { modified_on: ISODate() },
 $push: {
   products: {
     sku: "111445GB3", quantity: 1, title: "Simsong One mobile phone", price:1000
   }
 }
});

更多信息请参考以下http://advancedmongodb.blogspot.in/