亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查詢數組大小大于1的文檔

查詢數組大小大于1的文檔

撒科打諢 2019-06-19 17:00:50
查詢數組大小大于1的文檔我有一個MongoDB集合,其文檔格式如下:{   "_id" : ObjectId("4e8ae86d08101908e1000001"),   "name" : ["Name"],   "zipcode" : ["2223"]}{   "_id" : ObjectId("4e8ae86d08101908e1000002"),   "name" : ["Another ", "Name"],   "zipcode" : ["2224"]}我目前可以獲得與特定數組大小匹配的文檔:db.accommodations.find({ name : { $size : 2 }})將正確地返回帶有兩個元素的文檔。name陣列。但是,我不能$gt命令返回name字段的數組大小大于2:db.accommodations.find({ name : { $size: { $gt : 1 } }})如何使用name大小大于一個的數組(最好不必修改當前的數據結構)?
查看完整描述

3 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

在MongoDB2.2+中,有一種更有效的方法可以在查詢對象鍵中使用數字數組索引。

// Find all docs that have at least a second name array element.db.accommodations.find({'name.1': {$exists: true}})

您可以使用部分篩選表達式(要求3.2+)的索引來支持此查詢:

db.accommodations.createIndex(
    {'name.1': 1},
    {partialFilterExpression: {'name.1': {$exists: true}}});


查看完整回答
反對 回復 2019-06-19
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

我相信這是回答你問題的最快的查詢,因為它不使用解釋$where條款:

{$nor: [
    {name: {$exists: false}},
    {name: {$size: 0}},
    {name: {$size: 1}}]}

它的意思是“所有文檔,但沒有名稱的文檔(不存在或空數組)或只有一個名稱的文檔除外?!?/trans>

測試:

> db.test.save({})

> db.test.save({name: []})

> db.test.save({name: ['George']})

> db.test.save({name: ['George', 'Raymond']})

> db.test.save({name: ['George', 'Raymond', 'Richard']})

> db.test.save({name: ['George', 'Raymond', 'Richard', 'Martin']})

> db.test.find({$nor: [{name: {$exists: false}}, {name: {$size: 0}}, {name: {$size: 1}}]})

{ "_id" : ObjectId("511907e3fb13145a3d2e225b"), "name" : [ "George", "Raymond" ] }

{ "_id" : ObjectId("511907e3fb13145a3d2e225c"), "name" : [ "George", "Raymond", "Richard" ] }

{ "_id" : ObjectId("511907e3fb13145a3d2e225d"), "name" : [ "George", "Raymond", "Richard", "Martin" ] }

>


查看完整回答
反對 回復 2019-06-19
  • 3 回答
  • 0 關注
  • 950 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號